Как построить запрос в Laravel

Я новичок в 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);

});

Это показывает мне большой массив с данными, которые я на самом деле не понимаю.

введите описание изображения здесь

Моя БД выглядит так:
введите описание изображения здесь

2

Решение

Поскольку вы новичок в 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);

Красноречивый Ларавель хорошо читать на больше информации.

0

Другие решения

В коде

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);
});
5

По умолчанию поиск выполняет поиск идентификатора столбца в таблице, если вы используете «ShopID» в качестве первичного ключа, который вы должны определить в модели, например:

protected $primaryKey = 'ShopID';

после этого работает

$task = DB::table('WebShops')->find($ShopID);
3
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector