我有一个雄辩的ORM关系定义如下:
ProductConfiguration :
public function product()
{
return $this->belongsTo('Excel\Products\Product');
}
public function currency()
{
return $this->belongsTo('Excel\Currencies\Currency');
}
产品
public function productConfigurations()
{
return $this->hasMany('Excel\Products\ProductConfiguration');
}
public function productType()
{
return $this->belongsTo('Excel\Products\ProductType');
}
我希望如果我执行以下操作,我将加载指定产品类型的所有产品配置,相关产品,嵌套产品类型详细信息和产品配置货币
$results = ProductConfiguration::with(
array(
'product' => function($query) use ($product_type) {
$query->where('product_type_id' , $product_type);
},
'product.productType',
'currency'
)
)
->get();
但是返回的集合的“product”设置为NULL。货币关系存在,但产品关系不存在。我可以看到输出的SQL查询和选择产品的查询检索正确的产品,如果我将其直接粘贴到我的sql编辑器中
select * from `products`
where `products`.`id` in ('12', '13')
and `product_type_id` = '1'
我是否认为此查询的结果应该包含在我的收藏中,或者我的想法中存在一些明显的缺陷?
答案 0 :(得分:1)
我讨厌将此作为答案发布,但由于我没有足够的代表发表评论,所以请先尝试一下:
$results = ProductConfiguration::with('product')->get();
dd($results->toArray());
看看你得到了什么,如果你得到一些数据,试试这个
$results = ProductConfiguartion::with(array('products' => function($query){
$query->where('product_type_id' , $product_type);
})->get();
dd($results);
看看你得到了什么,如果你得到null:你的$ product_type变量可能是你没想到的,所以试试dd($ product_type)以确保它符合你的期望。
答案 1 :(得分:1)
我认为你不想实现这一目标。现在,您得到的所有ProductConfiguration
products
只有certain_type
。
因此,如果您的某些配置具有product
的其他类型,则您将获得null,因为您将product
的结果限制为仅限于具有特定产品类型的结果。
我可能错了,但您可能希望获得ProductConfiguration
属于Product
的{{1}}类型certain_type
。在这种情况下,您应该使用whereHas
:
$results = ProductConfiguration::
with('product', 'product.productType', 'currency')->
whereHas('product', function($q) use ($product_type)
{
$q->where('product_type_id', '=', $product_type);
})->get();