laravel создает свою собственную модель для каждой таблицы. Поскольку это одна из самых популярных рамочных работ, мы пошли на это. Большинство наших запросов mysql основаны на нескольких таблицах, мы используем join, и мы пишем эти запросы в самом контроллере. Может ли кто-то сказать нам, как обрабатывать запросы с несколькими таблицами в классе модели.
Заранее спасибо.
Вы должны определить отношение в своем классе модели. Информацию о соотношении см. Здесь.
Например, если я хочу получить доступ к имени штата, на моей странице города:
контроллер:
$city = App::make('Platform\Storage\City\CityRepository')->view($city_id, false, [], ['state'=>array('id', 'name')])
Repository:
public function view($id, $active=true, $fields=array(), $with=array()) {
$query = $this->model->newQuery();
$tableName = $this->model->getTable();
if ($active) {
$query->where($tableName . '.is_active', '=', 1);
}
if (!$fields) {
$fields = array($tableName . '.*');
}
if ($with) {
$with = $this->model->processWithSelects($with);
$query->with($with);
}
try {
return $query->with($with)->where($tableName . '.id', '=', $id)->first($fields);
}
catch (Exception $e) {
throw new DBException($e->getMessage(), $e->getCode(), $e->getPrevious());
}
}
Городская модель:
public function state() {
return $this->belongsTo('State');
}
Для получения дополнительной информации посетите следующие разделы: Учебник по репозиторию, запрос Laravel, Simple CRUD
В своем контроллере создайте конструктор:
public function __construct(Model $model) {
parent::__construct();
$this->model = $model; // Model $model, means IOC or Dependancy Injection
}
Затем выполните: $this->model->function_in_your_model()
, чтобы выполнить ваши функции модели.
Смотрите, если это помогает.