1

次のように書くことはできますか。

$post = Post::join(['author'])->find($postId);
$authorName = $post->author->name;

DB クエリビルダーを使用せずに、内部結合 (2 つの選択なし) を使用して 1 つの選択のみを生成するには

SELECT
  post.*, 
  author.*
FROM post
  INNER JOIN author 
    ON author.id = post.author_id
WHERE post.id = ?
4

2 に答える 2

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結果は、その属性が結果セットに対応するオブジェクトになることに注意してください。2 つの列が同じ名前の場合、マージされます。これは、次を使用した場合に発生します。

->select('post.*', 'author.*')

これを回避するには、次に示すように、select 句でこれらの列にエイリアスを作成する必要があります。

->select('post.id AS post_id', 'author.id AS author_id')
于 2013-08-13T16:12:15.653 に答える