我能写这样的东西:
$post = Post::join(['author'])->find($postId);
$authorName = $post->author->name;
仅生成一个具有内部联接的选择(没有2个选择)且不使用数据库查询构建器
SELECT
post.*,
author.*
FROM post
INNER JOIN author
ON author.id = post.author_id
WHERE post.id = ?
答案 0 :(得分:3)
您可以使用join
方法在Eloquent中执行此操作:
$post = Post::join('author', function($join)
{
$join->on('author.id', '=', 'post.author_id');
})
->where('post.id', '=', $postId)
->select('post.*', 'author.*')
->first();
请注意,$post
中的结果将是一个对象,其属性将与结果集相对应,如果两列具有相同的名称将合并。使用时会发生这种情况:
->select('post.*', 'author.*')
为避免这种情况,您应该在select子句中为这些列创建别名,如下所示:
->select('post.id AS post_id', 'author.id AS author_id')
答案 1 :(得分:0)
尝试
Post::join('author',function($join){
$join->on('author.id','=','post.author_id');
})->where('post.id','=',$postId)->select('post.*','author.*');