Laravel与方法的关系"与"返回null

时间:2017-09-24 16:12:41

标签: laravel null relationship

今天我想做一些干净的代码,所以刚开始为关系选择列。使用此代码:

\App\Genre::with([
   'family'
      ])->where([
         'slug' => $slug,
         'is_active' => true
      ])->first();
一切都运转良好。但是,当我开始为"和"选择列时方法:

\App\Genre::with([
   'family' => function ($query) {
       $query->select('name_pl', 'name_lat');
    }])->where([
       'slug' => $slug,
       'is_active' => true
    ])->first();

我得到的那个家族是null(但它应该是一个带有列的对象:name_pl,name_lat)。我做错了什么?

Genre类中的

族方法如下所示:

public function family () {
    return $this->belongsTo(Family::class);
}

我正在使用Laravel 5.4

2 个答案:

答案 0 :(得分:1)

你为什么不试试:

\App\Genre::with('family:name_pl,name_lat')->where([
    'slug' => $slug,
    'is_active' => true
])->first();

答案 1 :(得分:1)

非常确定您需要将相关列添加到所选列的列表中,否则Laravel无法将数据与急切加载相匹配。

假设Genrefamily_idFamily指定了id主键列,则需要:

$query->select('id', 'name_pl', 'name_lat'); // See the id added here?

应该做的伎俩。

为清楚起见,我提到的匹配就是这个:

select * from genre

select * from family where id in (1, 2, 3, 4, 5, ...)

- 以逗号分隔的ID列表包含在第一个查询中检索到的唯一family_id值。