Laravel Eloquent запрос 'where' не работает с данным идентификатором - PullRequest
0 голосов
/ 24 октября 2018

В моем проекте Laravel я посылаю идентификатор через маршрутизатор:

Route::get('dashboards/{dashboard}', 'DashboardController@show');

Идентификатор в этом случае 1.

В моем контроллере этот запрос:

public function show(Dashboard $dashboard)
{
    $dash = Dashboard::find($dashboard);
    return $dash;
}

возвращает приборную панель с идентификатором 1.Но когда я использую этот запрос, он ничего не показывает:

public function show(Dashboard $dashboard)
{
    $dash = DB::table('dashboards')->where('dashboardId', '=', $dashboard)->get();
    return $dash;
}

При использовании того же кода, но с заменой $dashboard на 1, он показывает мне все информационные панели с одинаковым идентификатором:

public function show(Dashboard $dashboard)
{
    $dash = DB::table('dashboards')->where('dashboardId', '=', 1)->get();
    return $dash;
}

Может кто-нибудь объяснить мне, почему это не работает?Запрос кажется мне правильным.

Ответы [ 4 ]

0 голосов
/ 24 октября 2018

может быть 2 варианта: во-первых, если вы хотите использовать объект Dashboard

 public function show(Dashboard $dashboard){
$dash = DB::table('dashboards')->where('dashboardId', '=', $dashboard->id)->get();
    return $dash;
}

или во-вторых, вы можете дать ссылку на id, передавая $ id, который в вашем случае равен $ dashboard

 public function show($dashboard){
$dash = DB::table('dashboards')->where('dashboardId', '=', $dashboard)->get();
    return $dash;
}

В вашем случае, если вы передаете id через URL, используйте прямую вторую альтернативу, упомянутую выше.

0 голосов
/ 24 октября 2018

Вы (неосознанно) используете Route Model Binding для принятия идентификатора панели управления.

https://laravel.com/docs/5.7/routing#route-model-binding

Это преобразует переданный вами идентификатор и получает модель для вас.

Поскольку у вас есть show(Dashboard $dashboard), вы получите модель Dashboard с идентификатором 1, когда перейдете на /dashboards/1

Это означает, что вам не нужна эта строка:

$dash = DB::table('dashboards')->where('dashboardId', '=', $dashboard)->get();

Поскольку $dashboard, который принимается в параметре функции, уже является Dashboard с идентификатором 1.

-

Если вы хотите вручную получитьприборной панели затем изменить параметр функции на show($dashboardId)

И тогда вы можете сделать это:

$dash = DB::table('dashboards')->where('dashboardId', $dashboardId)->first();

-

Существует действительнохорошее видео Laracasts о привязке модели маршрута здесь, если у вас есть к ним доступ:

https://laracasts.com/series/laravel-from-scratch-2017/episodes/9

0 голосов
/ 24 октября 2018

Вам не нужно записывать eloquent, если вы используете Dashboard $dashboard

public function show(Dashboard $dashboard)
{
   return $dashboard;
}

И если вы хотите использовать eloquent

public function show($dashboard)
{
    $dash = DB::table('dashboards')->where('dashboardId', '=', $dashboard)->get();
    return $dash;
}

Документация: https://jenssegers.com/52/laravel-route-model-binding-is-awesome

0 голосов
/ 24 октября 2018

Я думаю, вы должны передать в запросе $ dashboard-> id

$dash = DB::table('dashboards')->where('dashboardId', '=', $dashboard->id)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...