Laravel: как разбить отношения «один ко многим»? - PullRequest
0 голосов
/ 15 мая 2019

Уммм, мне нужны таблицы в моей базе данных. Автобус и станция, они имеют отношение один-ко-многим, вот проблема со сценарием-

  1. На одной станции может быть много автобусов.
  2. с 5-10 автобусами не нужно разбивать на страницы, но что, если на станции есть 100 или 1000 автобусов? этот подход ужасен.

и вот что я сделал ...

Автобусное сообщение со станцией

public function station()
{
    return $this->belongsTo(Station::class);
}

Статическая связь с шиной

public function bus()
{
    return $this->hasMany(Bus::class);
}

и вот что я сделал в Index Controller

//  getting ther user id
$id= Sentinel::getUser()->id;

// fiding the statioin_id of that user_id and assigning it to variable
$user = User::find($id);
$s_id = $user->station_id; 

//  fiding the station which tht station_id belongs to and assign it to variable
$station = Station::find($s_id);
$stations_id = $station->id;

//  getting buses of that specific station_id we just get and paginating it
$stationbus = Station::find($stations_id)->bus()->paginate();

return view('bus.index')->with('buses', $stationbus->bus);

и индексное представление

enter image description here

при выполнении вышеуказанного кода появится эта ошибка

Неопределенное свойство: Illuminate \ Pagination \ LengthAwarePaginator :: $ bus

и опять мой код работает нормально, за исключением нумерации страниц.

1 Ответ

0 голосов
/ 15 мая 2019

Вот некоторые из моих предложений по улучшению вашего кода:

В Station модель:

public function buses()
{
    return $this->hasMany(Bus::class);
}

имя метода должно быть buses(), так как он возвращает много buses, а не один bus

Тогда код вашего контроллера можно переписать, как показано ниже:

$user= Sentinel::getUser();//So, you have the user 

$station = Station::find($user->station_id);
//We don't need to query again, we already have the station. So...

$buses = $station->buses()->paginate();

return view('bus.index', compact('buses'));

Таким образом, это более читаемый, компактный и менее выполняемый запрос.

...