【问题标题】:Laravel "where" query with eager loading and relationshipLaravel“where”查询,带有急切加载和关系
【发布时间】:2014-06-12 06:02:05
【问题描述】:

我目前正在尝试为客户做一个自定义论坛软件,我正在使用 laravel 框架。 “板”包含有许多“cmets”的“讨论”。每个讨论都属于一个“类别”。

我现在要做的是按类别创建概览。类别是预定义的(例如“新闻”、“内部”、“项目”...),并且可以为它们分配讨论(类别可以为空)。

按类别获取讨论的控制器方法,通过url-slug搜索如下:

return View::make('pages.board.overview', [
    'discussions', DiscussionCategory::where('slug', $slug)->discussions()->paginate(25)
]);

除了它不起作用。我想检索具有指定类别的所有讨论(与他们的作者,通常我会使用::with('author'),但在这种情况下应该在哪里添加呢?),按 25 个项目分页。

如何构建这样的查询?甚至可以在一个查询中完成吗?

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    这将起作用:

    DiscussionCategory::where('slug', $slug)->with('discussions.author')->paginate(25)
    

    在关系上设置外键:

    // Discussion model, the same applies to the Category model
    public function category()
    {
        return $this->belongsTo('Umc\Models\DiscussionCategory', 'category_id');
    }
    

    分页讨论:

    $category = DiscussionCategory::where('slug', $slug)->first();
    $discussions = $category->discussions()->paginate(25);
    $discussions->load('author'); // eager load authors on the collection
    

    【讨论】:

    • 哇,好吧......这几乎可以工作。我刚收到这个错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'board_discussions.discussion_category_id' in 'where clause' (SQL: select * from board_discussions` 其中board_discussions.deleted_at 为空,board_discussions.discussion_category_id in (1))`
    • 那么你的关系设置不正确。请展示讨论模型。
    • 好的,这里是讨论模型:hastebin.com/onaxosurel.php,这里是类别模型:hastebin.com/sunegokiqi.php
    • 我也有一些关系问题——如果我们能在这个问题上解决它,我不需要打开一个新的;)
    • 好的,所以讨论表上的 FK 似乎是 category_id,而 Eloquent 会查找默认值是 related_class_id,因为您没有指定自定义键。几秒钟后检查我的编辑
    猜你喜欢
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多