从Laravel中的hasMany关系返回第一个模型

从Laravel中的hasMany关系返回第一个模型,laravel,datatables,eloquent,Laravel,Datatables,Eloquent,是否可以创建一个快速方法来从一对多关系返回第一个模型?以下是我的代码,来自模型文件: public function books() { return $this->hasMany('App\Models\Book'); } public function first_book() { return $this->book()->first(); } 这就是我得到的错误: “调用未定义的方法illumb\Database\Query\Builder::add

是否可以创建一个快速方法来从一对多关系返回第一个模型?以下是我的代码,来自模型文件:

public function books() {
    return $this->hasMany('App\Models\Book');
}

public function first_book() {
    return $this->book()->first();
}
这就是我得到的错误:

“调用未定义的方法illumb\Database\Query\Builder::addagerConstraints()”

我想使用它的原因是,我可以使用with()方法收集第一条记录,例如:

    $authors = Author::with('first_book')->select('*');
我正在将这些记录与数据表一起使用。

要将
与()
一起使用,您的方法必须从关系方法返回集合,因为您的关系非常复杂。所以你可以做的是:

public function books() {
    return $this->hasMany('App\Models\Book');
}

public function first_book() {
    return $this->hasMany('App\Models\Book')->limit(1);
}
这将返回包含第一个项目的集合,因此您仍然必须调用
first()


可以立即加载的关系必须返回查询。
first()
函数返回一个雄辩的对象

解决方案是限制此查询的结果数,如下所示:

public function first_book() {
    return $this->books()->take(1);
}

$author->first\u book
仍然是一个集合,但它只包含数据库中的第一本相关书籍。

一对一关系是一种非常基本的关系。比如说

public function books()
    {
        return $this->hasOne('App\Models\Book');
    }

我可能会迟到,但为了您将来的使用,以及其他想要相同输出的人,请尝试此选项-

//如果你需要最后一个

public function books() {
    return $this->hasOne('App\Models\Book')->latest();
}
//如果您需要第一个条目-

public function books() {
        return $this->hasOne('App\Models\Book')->oldest();
    }

我将替换return$this->hasMany('App\Models\Book')->limit(1);返回$this->books()->limit(1);是否可以从特定索引位置返回值?例如,像这样$行->子类别[0]->name@RoshJ取决于什么是
sub_category
,如果它是一个集合,那么是的,你可以调用
$row->sub_category->get(0)->name
。是的,subcategory是一个数组,但这不起作用,我尝试过:(为我工作!@JerodevIt的order by ID right?如何从何处和自定义orderBy获取它?我尝试过没有
最新()
最早的()
并且工作得很好。谢谢。如果希望它返回对象而不是数组,这是最好的解决方案。如果使用如上所示的
take(1)
,那么您将不得不始终运行
first()
[0]
以获取所需的数据。这是一个很好的解决方案,我们还可以链接查询条件以获取所需的记录。只有这样,该关系才能称为-book
public function books() {
        return $this->hasOne('App\Models\Book')->oldest();
    }