Laravel - Когда использовать → get()
Я смущен, когда ->get()
в Laravel...
например. DB::table('users')->find(1)
не требуется → get() для извлечения результатов, и User::find(1)
В документах laravel говорится: "... выполнить запрос, используя метод get или first..."
Я читал Fluent Query Builder и Eloquent docs, но не понимаю, когда требуется использование get()...
Спасибо за помощь ![enter image description here]()
Ответы
Ответ 1
Поскольку функция find()
всегда будет использовать первичный ключ для таблицы, необходимость в get()
не нужна. Потому что вы не можете сузить свой выбор и почему он всегда будет просто пытаться получить эту запись и вернуть ее.
Но когда вы используете Fluent Query Builder, вы можете вложить условия как таковые:
$userQuery = DB::table('users');
$userQuery->where('email', '=', '[email protected]');
$userQuery->or_where('email', '=', '[email protected]');
Это позволяет добавлять условия во всем коде, пока вы не захотите их извлечь, а затем вы вызовете функцию get()
.
// Done with building the query
$users = $userQuery->get();
Ответ 2
- Для
find(n)
вы извлекаете строку на основе первичного ключа, который равен "n".
- Для
first()
вы извлекаете первую строку среди всех строк, которые соответствуют предложениям where.
- Для
get()
вы извлекаете все строки, которые соответствуют предложениям where. (Обратите внимание, что для доступа к всем строкам требуются петли, или вы получите некоторые ошибки).
Ответ 3
find
возвращает одну строку из базы данных и представляет ее как свободный/красноречивый объект. например SELECT * FROM users WHERE id = 3
эквивалентно DB::table('users')->find(3);
get
возвращает массив объектов. например SELECT * FROM users WHERE created_at > '2014-10-12'
эквивалентен DB::table('users')->where('created_at', '>', '2014-10-12')->get()
будет возвращать массив объектов, содержащих пользователей, где созданное в поле новее, чем 4014-10-12.
Ответ 4
Метод get() даст вам все значения из базы данных, которые соответствуют вашим параметрам, где first() получает только первый результат. Вы используете find() и findOrFail(), когда ищете ключ. Вот как я их использую:
Когда мне нужны все данные из таблицы, я использую метод all() Модель:: все();
Когда я хочу найти по первичному ключу: Модель:: найти (1) → первый();
Или Модель:: findOrFail (1) → первый();
Это будет работать, если есть строка с первичным ключом из одного. Он должен извлекать только одну строку, поэтому я использую first() вместо get(). Помните, что если вы удалили строку, которая использовала ключ 1, или у вас нет данных в вашей таблице, ваша находка (1) потерпит неудачу.
Когда я ищу конкретные данные, как в предложении where: Model:: where ('field', '=', 'value') → get();
Когда я хочу только первое значение данных в предложении where. Model:: where ('field', '=', 'value') → first();