laravel 在用with连表查询的时候没有返回相应的数据,没有连接表的数据
查询语句如下:
Article::with('category:id,name')->select('title', 'description', 'slug')->get();
这句话的查询结果只有Article表的字段,并没有将category一并查出,错误的原因就在于缺少了关联字段!我们需要注意两个地方:
with('category:id,name)
一定要带id
select()
中一定要带与category
关联的字段,这里我的表中是用cate_id
关联,所以要写成select('cate_id', ...)
最终,正确的语句应该是:
Article::with('category:id,name')->select('cate_id', 'title', 'description')->get();
其实很好理解,连表查询的时候用a left join b on a.id = b.a_id
这种语法,所以这个查询需要两个关联的字段。
with()
是一种渴求加载eager load,而laravel eloquent默认的是懒加载lazy load,利用with
我们就可以一次性查出想要的所有数据。
建立模型间的关联:
class Article extends BaseModel
{
[..]
public function category()
{
return $this->belongsTo(Category::class, 'cate_id', 'id');
}
[..]
}
其中belongsTo()
方法三个参数分别是关联的Model类,Article表关联Category表的外键cate_id
,Category表的主键。为了更好的表述,这里给出表结构:
Article表
id | cate_id | title | description |
---|---|---|---|
1 | 1 | with使用 | laravel中with的使用 |
Category表
id | name |
---|---|
1 | Laravel |
查询时就用上面提到的:
Article::with('category:id,name')->select('cate_id', 'title', 'description')->get();
viencoding.com版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/141