laravel with查询失效 没有返回相应的数据

2019-04-05 15:11:07   Laravel
  Laravel  

laravel with查询失效 没有返回相应的数据

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()完整使用

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();
vien.tech版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/141
欢迎小伙伴们在下方评论区留言 ~ O(∩_∩)O
文章对我有帮助, 点此请博主吃包辣条 ~ O(∩_∩)O

猜你喜欢


评论

There are no comments yet.
未登录

登录后即可发表评论

登录或注册