dre*_*ltz 10 php orm laravel eloquent
使用Laravel和雄辩的ORM,我想创建属于特定用户(登录的用户)的所有帖子和相应评论的数组或对象.然后结果将与Response :: eloquent()一起使用; 返回JSON.
基本上在伪代码中:
All Posts by user ::with('comments').
Run Code Online (Sandbox Code Playgroud)
要么
Posts by Auth::user()->id ::with('comments').
Run Code Online (Sandbox Code Playgroud)
我通常使用用户的表,注释表和帖子表进行数据库设置.comments表有一个post_id,posts表有一个user_id.
在没有Laravel的情况下做这件事的漫长道路将是:
SELECT * FROM posts WHERE user_id = 'user_id'
foreach($result as $post) {
SELECT * FROM comments WHERE posts_id = $post->id
foreach($query as $comment) {
$result[$i]->comments[$n] = $comment
}
}
Run Code Online (Sandbox Code Playgroud)
但我想用Laravel的Eloquent ORM来实现它.
小智 13
看起来你甚至不需要嵌套的eager load,你只需要修改带有return的查询,所以:
$posts = Post::with('comments')->where('user_id', '=', 1)->get();
Run Code Online (Sandbox Code Playgroud)
您可以菊花链式连接Eloquent系统中的大多数方法,通常它们只是返回一个Fluent查询对象.
(我没有测试过,但我相当肯定会工作.另外,你不能在:: all()上做,因为你调用了 - > get().你必须深入挖掘源代码.代码找到这个,我不认为Eloquent文档提到它正在做的事情.)
此外,Eager Loading文档还包含嵌套的预先加载,因此您可以使用其评论加载所有用户及其评论:
您甚至可能急于加载嵌套关系.例如,假设我们的作者模型具有"联系人"关系.我们可以从我们的Book模型中急切加载这两种关系,如下所示:
$books = Book::with(array('author', 'author.contacts'))->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10776 次 |
| 最近记录: |