laravel 在用with连表查询的时候没有返回相应的数据,没有连接表的数据
查询语句如下:
Article::with('category:id,name')->select('title', 'description', 'slug')->get();这句话的查询结果只有Article表的字段,并没有将category一并查出,错误的原因就在于缺少了关联字段!我们需要注意两个地方:
with('category:id,name)一定要带idselect()中一定要带与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();