Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть необходимость использовать ORM для облегчения взаимодействия с базой данных. Сущности связаны между собой следующими зависимостями:
- Gate один ко многим Device;
- Device один ко многим Canal;
Для для реализации этих зависимостей в моделях были установлены соответствующие взаимосвязи(Relationships).
Модель шлюзы:
class Gate extends Eloquent
{
public static $timestamps = false;
public function system(){
return $this->belongs_to('System');
}
public function gatetype(){
return $this->belongs_to('Gatetype');
}
public function device(){
return $this->has_many('Device');
}
}
Модель устройства:
class Device extends Eloquent
{
public static $table = 'devices';
public static $timestamps = false;
public function gate(){
return $this->belongs_to('Gate');
}
public function gatetype(){
return $this->belongs_to('Devtype');
}
public function canal(){
return $this->has_many('Canal');
}
}
Модель каналы:
class Canal extends Eloquent
{
public static $timestamps = false;
public function canaltype(){
return $this->belongs_to('Canaltype');
}
public function condition(){
return $this->has_many('Condition');
}
public function scnstep(){
return $this->has_many('Scnstep');
}
public function device(){
return $this->belongs_to('Device');
}
}
При данных взаимоотношениях работают конструкции вида:
Gate::find($id)->device()->get();
Но при использовании конструкций вида:
Gate::find($id)->device()->canal()->get();
Я получаю ошибку:
Call to a member function device() on a non-object
Документация, увы, мне не помогла.
Возможно, я неправильно установил взаимоотношения, либо я не правильно понимаю механизм построения запросов.
В чем кроется проблема?
Не в сети
Не в сети
Боюсь я не правильно выразился, прошу прощения за невнимательность, вот это работает:
Gate::find($id)->device()->get();
Так же как и
Gate::find($id)
$id по которому производится поиск корректно, а такая запись в базе данных существует.
Проблема заключается в выражениях:
Gate::find($id)->device()->canal()->get();
Ошибка следующего содержания:
Method [canal] is not defined on the Query class.
Не в сети
Да действительно, вы правы. Мне это в голову увы не пришло. Спасибо за помощь.
Не в сети
Не в сети
Страницы 1