Я новичок в Laravel и у меня есть некоторые проблемы с пониманием, как работает построитель запросов.
Я создал проект laravel и успешно подключил его к sqlsrv. И теперь я хотел бы получить данные из базы данных.
Для первых без моделей только в wep.php
для понимания.
Route::get('/tasks', function () {
$tasks = DB::table('WebShops')->get();
dd($tasks);
});
Это работает, он показывает мне все строки БД.
Теперь я хотел бы отфильтровать строки с find
команда и я получаю ошибку:
Route::get('/tasks/{ShopID}', function($ShopID){
$task = DB::table('WebShops')->find($ShopID);
dd($task);
});
SQLSTATE [42S22]: [Microsoft] [Драйвер ODBC 11 для SQL Server] [SQL
Сервер] Неверное имя столбца «id». (SQL: выберите топ 1 * из
[Интернет-магазины] где [id] = 1)
Это сбивает с толку, потому что я назначил поиск ShopID
и теперь я получаю ошибку, которая ищет id
, Зачем ?
Я пробовал также это:
Route::get('/tasks/{ShopID}', function($ShopID){
$task = DB::table('WebShops')->where('ShopID', $ShopID);
//dd($task->name); here comes also an error
dd($task);
});
Это показывает мне большой массив с данными, которые я на самом деле не понимаю.
Поскольку вы новичок в Laravel, это хорошая возможность начать строить свои модели вместо использования построителя запросов.
class WebShop extends Model {
//You need this because by convention Laravel assumes table names are snake_cased (it would look for web_shops)
protected $table = "WebShops";
// You need this because by convention the primary key is called id.
protected $primaryKey = 'ShopID';
}
Тогда будет работать следующий код:
$shop = WebShop::find($id);
Красноречивый Ларавель хорошо читать на больше информации.
В коде
Route::get('/tasks/{ShopID}', function($ShopID){
$task = DB::table('WebShops')->find($ShopID);
dd($task);
});
вы пытаетесь найти строки, где какие поле равно $ShopID
значение?
Ларавел не знает. Итак, предполагается, что у вас есть поле id
в качестве первичного ключа. Поскольку у вас нет такого поля, в соответствии с вашей структурой таблицы, у вас есть ошибка.
Согласно инструкции, вы можете переопределить первичный ключ с помощью:
public $primarykey = 'ShopID';
в вашем модель файл.
Во второй попытке получить коллекцию записей — добавить get()
:
Route::get('/tasks/{ShopID}', function($ShopID){
$task = DB::table('WebShops')->where('ShopID', $ShopID)->get();
dd($task);
});
По умолчанию поиск выполняет поиск идентификатора столбца в таблице, если вы используете «ShopID» в качестве первичного ключа, который вы должны определить в модели, например:
protected $primaryKey = 'ShopID';
после этого работает
$task = DB::table('WebShops')->find($ShopID);