thinkphp6入门(14)-- 多关联模型查询

背景:

有3个数据表,一个User表,一个Cloth表,一个Shoe表。

Cloth表和Shoe表分别和User表通过user_id关联。

thinkphp 6中如何通过模型查询所有用户,其中包括每个用户的cloth和shoe。

多关联模型查询:

1. User模型 (app\model\User.php):

namespace app\model;

use think\Model;

class User extends Model
{
    // 设置表名(如果与默认的表名不同)
    protected $table = 'user';

    // 关联到Cloth模型
    public function cloths()
{
        return $this->hasMany('App\model\Cloth', 'user_id');
    }

    // 关联到Shoe模型
    public function shoes()
{
        return $this->hasMany('App\model\Shoe', 'user_id');
    }
}

2. Cloth模型 (app\model\Cloth.php):

namespace app\model;

use think\Model;

class Cloth extends Model
{
    // 设置表名(如果与默认的表名不同)
    protected $table = 'cloth';

    // 关联到User模型
    public function user()
{
        return $this->belongsTo('App\model\User', 'user_id');
    }
}

3. Shoe模型 (app\model\Shoe.php):

Cloth模型类似,确保Shoe模型也有与User的关联关系。

4. 查询所有用户及其关联的Cloth和Shoe:

在控制器或其他地方,可以这样查询:


use app\model\User;

// 查询所有用户及其关联的Cloth和Shoe数据
$users = User::with(['cloths', 'shoes'])->select();

// 输出结果(例如,使用dump函数)
dump($users);

这段代码首先使用with()方法指定要加载的关联数据(即clothsshoes),然后使用select()方法执行查询。查询结果将是一个包含所有用户及其关联的ClothShoe数据的数组。每个用户对象都会包含与其关联的ClothShoe数据。

5. 增加查询条件


use app\model\User;

// 查询所有用户及其关联的Cloth和Shoe数据
$users = User::with(['cloths', 
   'shoes'=>  function (Query $query) {
          $query->where('is_delete', 0);
    }])->where('is_member', 1)->select();

// 输出结果(例如,使用dump函数)
dump($users);

关于如何解决不同模型间字段名重复的问题,参考:

https://www.kancloud.cn/manual/thinkphp6_0/1037600

效果类似

thinkphp6入门(14)-- 多关联模型查询_第1张图片

by 软件工程小施同学 

你可能感兴趣的:(PHP,thinkphp)