【问题标题】:Relationship ordered by column?按列排序的关系?
【发布时间】:2020-07-08 07:08:33
【问题描述】:

我希望我的出版物关系按“排序”列排序。
到目前为止,这是我想出的:

class Book extends Model
{
     public $hasMany = [
         'publications' => ['Codalia\Bookend\Models\Publication']
     ];
  ...
}

class Publication extends Model
{
     public $belongsTo = [
         'book' => ['Codalia\Bookend\Models\Book']
     ];
  ...
}

$book = Book::with(['publications' => function ($q){
    $q->orderBy('ordering');
}])->where('id', $id)->get();

$book->publications;

但我得到一个错误:

此集合实例上不存在属性 [publications]。

为什么我要检索一个集合而不是 Book 对象?

【问题讨论】:

  • 从未见过这样声明的关系,你有任何来源吗?
  • 这是在模型中声明关系的经典方式。它有什么问题?
  • 没什么问题,从来没有见过,我只是一直在使用他们在文档中使用的“方法”类型声明。今天学到了一些东西;)
  • 好的。你可以在这里找到一些例子:octobercms.com/docs/database/relations

标签: laravel eloquent relationship


【解决方案1】:

->get(); 将返回许多集合。你要找的是->first();

$book = Book::with(['publications' => function ($q){
    $q->orderBy('ordering');
}])->where('id', $id)->first(); // here

$book->publications;

【讨论】:

    猜你喜欢
    • 2016-11-10
    • 2016-06-21
    • 2014-06-25
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多