【问题标题】:Laravel Eloquent Relationship Sub-Relationship?Laravel 雄辩的关系子关系?
【发布时间】:2015-09-22 17:24:30
【问题描述】:

我有一个具有以下关系的 Offer 类:

class Offer extends Model
{
    public function releases()
    {
        return $this->belongsToMany('App\Release');
    }
}

Release 类有这样的关系:

class Release extends Model
{
    public function artist()
    {
        return $this->belongsTo('App\Artist');
    }
}

最简单的修改方法是什么

   App\Offer::with('releases')->get();

以便在每个版本中也获得艺术家信息?

【问题讨论】:

    标签: laravel eloquent laravel-5.1


    【解决方案1】:

    您可以这样做:

    App\Offer::with('releases.artist')->get();
    

    您可以查看:http://laravel.com/docs/5.1/eloquent-relationships#querying-relations 了解更多信息。

    如果您有多个关系,您可以通过以下方式查询它们:

    App\Offer::with(['releases.artist', 'releases.albums'])->get();
    

    当你向下滚动一点时,你会看到

    // Retrieve all posts that have at least one comment with votes...
    $posts = Post::has('comments.votes')->get();
    

    记住“点”符号是 Laravel 的标准约定。例如加载一个视图:

    view('folder.viewfile');
    

    这同样适用于 eloquents 嵌套关系。

    【讨论】:

    • 哦,漂亮,我早该知道 Laravel 能够做到,而且以如此简单优雅的方式。感谢您非常迅速的答复,将尽快接受!
    • 如果我也有releases.albums怎么办?我会做 App\Ofer::with('releases.artist')->with('releases.albums')->get();
    • @ajameswolf 我已经更新了我的答案。你可以通过传递一个值数组来做到这一点。
    【解决方案2】:
    OrderProduct::with(
                    array(
                        'product' => function ($query) {
                            $query->select('id', 'store_id', 'en_name', 'bn_name', 'image')->with(
                                array(
                                    'store' => function ($q) {
                                        $q->select('id');
                                    }
                                )
                            );
                        }
                    )
                )->where('order_id', $order->id)->get(),
    

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 2018-11-28
      • 2015-01-11
      • 2021-06-03
      • 2020-03-26
      • 1970-01-01
      相关资源
      最近更新 更多