商品:
public function variations() {
return $this->hasMany( CommodityVariation::class )->with( 'unit' );
}配方:
public function commodity_variations() {
return $this->belongsToMany( CommodityVariation::class, 'recipe_commodity_variations' )->with( 'commodity' )->withTimestamps();
}CommodityVariation:
public function commodity() {
return $this->belongsTo( Commodity::class )->with( 'variations', 'allergens' );
}
public function recipes() {
return $this->belongsToMany( Recipe::class, 'recipe_commodity_variations' )->withTimestamps();
}我正在寻找的东西:,我想得到所有使用/拥有这种特定商品的菜谱,但是我必须通过我的commodity_variations来找出菜谱和商品之间的关系。这是因为配方与商品的变化有关,而商品的变化则与商品有关。
到目前为止,我构建的是这个,但是它只返回了50个关于我输入的commodity_id的菜谱。例如,如果我写的是100000,而不是$ recipes >id,它还会返回50个菜谱。
$recipe = $department->recipes()->with(["commodity_variations" => function($q) use ( $commodity ) {
$q->where('commodity_variations.commodity_id', '=', $commodity->id);
}])->get();我真的搞不清我做错了什么。我可能误解了这些关系是如何运作的一些基本的东西。
编辑:这里是另一个例子
$commodity_variations = $recipe->commodity_variations()->with( [
'commodity' => function ( $query ) use ( $commodity ) {
$query->where( 'commodities.id', $commodity->id );
}
] )->get();应该只返回具有->id= 11的商品变体,但它返回全部。好像它完全忽略了我的查询中的哪个部分。
发布于 2019-09-10 11:52:46
试一次这个。
$commodity_variations = $recipe->whereHas('commodity_variations' ,
function ( $query ) use ( $commodity ) {
return $query->where( 'commodity_variations.commodity_id', $commodity->id );
}
)->get();还请参考以下内容:http://laravel.com/docs/4.2/eloquent#querying-relations
发布于 2019-09-10 11:38:44
这是一个可行的解决方案。提出了一种新的模式,兼顾了配方与商品变化之间的多到多关系。
class RecipeCommodityVariations extends Model {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'recipe_commodity_variations';
}查询:
$recipeCommodityVariations = RecipeCommodityVariations::whereIn( 'recipe_id', $department->recipes()->pluck( 'recipe_id' ) )->whereIn( 'commodity_variation_id', $commodity->variations()->pluck( 'id' ) )->pluck( 'recipe_id' )困扰我的是我觉得我做错了.挺烦人的。
https://stackoverflow.com/questions/57867986
复制相似问题