2016-10-18 7 views
1

У меня есть две таблицы:Концепция таблицы отношений в Laravel

  • Cards
  • Notes

Каждый карты имеет несколько Примечания. Таким образом, между ними существует такая связь:

class Card extends Model { 

    public function notes() 
    { 
     return $this->hasMany(Note::class); 
    } 
} 

Хорошо, все отлично.


Теперь мне нужно понять концепцию этих двух линий:

$card()->$notes()->first(); 

и

$card()->$notes->first(); 

В чем разница между ними? Как вы видите в первом $note() является функцией, а во втором $note не является функцией. Как они будут переведены на PHP?

Первый указывает на таблицу card, а второй указывает на таблицу notes, верно? или что? Во всяком случае, я встал, чтобы понять концепцию тама.

+0

'$ примечания() 'является методом, тогда как' $ notes' является свойством объекта. –

ответ

3

Я не знаю про $ до $notes в вашем коде, но если вы попытаетесь сказать что-то вроде этого.

1- $card->notes()->first(); 
2- $card->notes->first(); 

В коде в строке 1, первый у вас есть $card модели, а затем вы хотите, чтобы получить доступ ко всему notes(), связанный с этим $card, и из-за добавления () после notes вы просто звоните query builder по нотам, показать вы можете после этого выполнить любую другую функцию запроса базы данных, что-то вроде where, orderBy, groupBy, ... и любой другой сложный запрос в базе данных.

Но во втором вы фактически получаете доступ к collection примечаний, связанным с этим $card, мы не можем сказать, что вы получите все связанные заметки из базы данных и установить его в коллекцию Laravel и вы больше не в состоянии выполнить запрос базы данных по адресу notes.

Примечание: потому что Laravel коллекции есть некоторые методы, как where(), groupBy(), whereIn(), sort(), ... вы можете использовать их на второй, но в этом случае вы выполняете эти методы на коллекций и не базы данных, you already get all results from database

+0

спасибо .. upvote – stack

Смежные вопросы