2016-02-01 1 views
0

Если бы я хотел, чтобы объединить две таблицы, я мог бы сделать это:уплощение присоединяется красноречивым

$books = App\Book::with('author')->get(); 

Проблема в том, что результаты своего рода вложенными. например. Если бы я хотел, чтобы получить DOB автора я должен сделать это:

foreach ($books as $book) { 
    echo $book->author->dob; 
} 

Но что если я, вместо того, хотел быть в состоянии сделать это ?:

foreach ($books as $book) { 
    echo $book->dob; 
} 

Как может Я продолжаю это делать? Я полагаю, что конфликт может быть столбец в таблице book и таблице author, и что делать author_dob было бы лучше, но предположим, что конфликта нет.

Я думаю, что представление может сделать трюк, но есть ли способ сделать это в Laravel без необходимости создавать представление?

+1

'App \ Book :: с («автор») 'не присоединяется, а ищет загрузку, на самом деле это два запроса – balping

+0

Посмотрите: https://laravel.com/docs/5.2/queries#joins – balping

ответ

2
$books = DB::table('books') 
      ->join('authors', 'authors.id', '=', 'books.author_id')->get() 

Фактически вы можете сделать то же самое с помощью красноречия. Таким образом, вы будете иметь доступ ко всем функциям и дополнительных параметров в вашем файле модели Book

App\Book::join('authors', 'authors.id', '=', 'books.author_id')->get() 

Вы можете использовать leftJoin() вместо join()