首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel:检索关系数据

Laravel:检索关系数据
EN

Stack Overflow用户
提问于 2019-09-10 09:37:26
回答 2查看 60关注 0票数 1

商品:

代码语言:javascript
复制
public function variations() {
    return $this->hasMany( CommodityVariation::class )->with( 'unit' );
}

配方:

代码语言:javascript
复制
public function commodity_variations() {
    return $this->belongsToMany( CommodityVariation::class, 'recipe_commodity_variations' )->with( 'commodity' )->withTimestamps();
}

CommodityVariation:

代码语言:javascript
复制
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个菜谱。

代码语言:javascript
复制
$recipe = $department->recipes()->with(["commodity_variations" => function($q) use ( $commodity ) {
    $q->where('commodity_variations.commodity_id', '=', $commodity->id);
}])->get();

我真的搞不清我做错了什么。我可能误解了这些关系是如何运作的一些基本的东西。

编辑:这里是另一个例子

代码语言:javascript
复制
            $commodity_variations = $recipe->commodity_variations()->with( [
                'commodity' => function ( $query ) use ( $commodity ) {
                    $query->where( 'commodities.id', $commodity->id );
                }
            ] )->get();

应该只返回具有->id= 11的商品变体,但它返回全部。好像它完全忽略了我的查询中的哪个部分。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-10 11:52:46

试一次这个。

代码语言:javascript
复制
        $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

票数 0
EN

Stack Overflow用户

发布于 2019-09-10 11:38:44

这是一个可行的解决方案。提出了一种新的模式,兼顾了配方与商品变化之间的多到多关系。

代码语言:javascript
复制
class RecipeCommodityVariations extends Model {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'recipe_commodity_variations';
}

查询:

代码语言:javascript
复制
$recipeCommodityVariations = RecipeCommodityVariations::whereIn( 'recipe_id', $department->recipes()->pluck( 'recipe_id' ) )->whereIn( 'commodity_variation_id', $commodity->variations()->pluck( 'id' ) )->pluck( 'recipe_id' )

困扰我的是我觉得我做错了.挺烦人的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57867986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档