Как получить данные на основе условия id в Laravel - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь получить данные на основе case_id из таблицы случаев, и я fk (case_id) в моей таблице сокетов, но в моем ответе появляется пустой массив:

Вот мой контроллер:

public function index($case_id)
    {
        $id = kase::find($case_id);

        $data = DB::table('sockets')->where('case_id',$id)->get();
        return $data;
    }

Мой маршрут:

 Route::get('/case-log/{id}', 'CaseLogController@index');

Где я ошибаюсь?

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Вы получаете null для kase :: find ($ case_id), потому что laravel предполагает первичный ключ, а индекс назван 'id'. Чтобы изменить этот параметр на вашей модели kase, установите его следующим образом. Вы также можете построить свое отношение к вашей модели socket следующим образом:

class kase extends Model
{
    ...
    protected $primaryKey = 'case_id';
    ...
    
    
    public function sockets()
    {
        return $this->hasMany(socket::class, 'case_id');
    }
}

Также вам необходимо, чтобы параметры метода вашего контроллера соответствовали параметрам вашего маршрута. Итак:

public function index($id)
{
    $case = kase::with('sockets')->find($id);
   
    return $case->sockets;
}

0 голосов
/ 13 июля 2020

Имя слага в вашем маршруте должно совпадать с именем параметра в вашем методе index, поэтому вам нужно изменить один из этих

Route::get('/case-log/{case_id}', 'CaseLogController@index');

и

public function index($case_id)
{
    $id = kase::find($case_id);

    $data = DB::table('sockets')->where('case_id',$id)->get();
    return $data;
}
...