Laravel Eloquent with()-> 返回 null

Posted

技术标签:

【中文标题】Laravel Eloquent with()-> 返回 null【英文标题】:Laravel Eloquent with()-> returning null 【发布时间】:2014-07-30 14:11:39 【问题描述】:

我正在尝试使用 Eloquent 获取具有映射到 brands 表的 brand_id 列的特定产品,brand 数组返回为空。

这里有什么明显的地方需要改变吗?

$product = Product::with('images')->with('brand')->select($fields)->where('display', '=', 1)->find($id);

//产品型号

class Product extends Eloquent 
    ...
    public function brand()
    
        return $this->belongsTo('Brand');
    

//品牌型号

class Brand extends Eloquent 
...
public function products()

    return $this->hasMany('Product');

【问题讨论】:

你检查过:$brand = $product->brand(); ? $fields 变量中有哪些字段? 【参考方案1】:

你有这个:

$product = Product::with('images', 'brand')
                  ->select($fields)
                  ->where('display', 1)
                  ->find($id);

你得到null for brand,这可能是因为你有一些特定的字段,很可能你没有从products表中选择foreing_keyBrand建立关系,因此,如果您的products 表包含brand 表的foreign_key(可能是brand_id),那么您也必须从products 表中选择foreign_key。因此,只需将 foreign_key/brand_id 添加到 $fields 变量中即可。如果没有关系构建器密钥 (FK),Brand 将不会被加载。

【讨论】:

天才。谢谢,您对 $fields 的看法完全正确。 只是在此处添加此内容-如果您使用“with”语句指定任何列,则需要确保包含“id”列,否则您将得到再次为空。我假设需要“id”来匹配外键 - 但这是我假设“with”语句自己完成的事情。

以上是关于Laravel Eloquent with()-> 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以避免在 Laravel 5.7 Eloquent 中加载父级时加载这些 $with 模型?

在 Laravel Eloquent 中使用 with() 返回对象

在 Laravel Eloquent 中使用“with()”函数连接列

如何在你已经获得的东西上使用 Laravel Eloquent ::with()?

在 Laravel Eloquent 中使用“With()”函数获取特定列

Laravel Eloquent Multiple Where with count