gpt4 book ai didi

php - 你如何通过一对一的关系来订购 Laravel Builder?

转载 作者:行者123 更新时间:2023-12-04 18:01:30 25 4
gpt4 key购买 nike

我有两个模型,Book 和 Author。 Book belongsTo Author(我已经从其他部分修剪了一些垃圾):

class Book extends Model {
protected $table = 'books';
protected $fillable = ['title'];

public function author(){
return $this->belongsTo('Author', 'author');
}
}

class Author extends Model {
protected $table = 'authors';
protected $fillable = ['name'];
}

如果我想按书名排序所有的书,我会使用这个:

Books::with(['author'])->orderBy('title', 'asc')->get();

是否可以按作者姓名订购这些书籍?我尝试了很多组合:

Books::with(['author' => function($query){
$query->orderBy('name', 'asc');
}])->get();

Books::with(['author'])->orderBy('name')->get();

Books::with(['author'])->orderBy('author.name')->get();

Books::with(['author'])->orderBy('authors.name')->get();

但都没有用。我认为,第一种方法是使用 with() 查询,在将所有作者加入图书集合之前对其进行排序。其他人抛出 500 个错误。

如果这是普通的 MySQL,我会这样写:

select * from books join authors on books.author_id = authors.id order by authors.name asc;

在 laravel 5.1 中使用 Builder/Eloquent 是否可行?我需要使用数据库查询吗?

最佳答案

通过调用 with('author') 启用eager load 将在单独的查询中加载作者,这就是为什么作者的列不可用并且按它们排序不起作用的原因.需要显式加入。

为了按关系排序,您需要将您的书籍与其作者联系起来:

Book::select('books.*')
->join('authors', 'authors.id', '=', 'books.author_id')
->orderBy('authors.name')
->get();

关于php - 你如何通过一对一的关系来订购 Laravel Builder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34667125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com