У меня в настоящее время возникают проблемы с: n отношениями с Laravel 4, у меня ошибка с таблицей поворота, которая запрашивает таблицу с обоими компонентами по единственному имени. Я создать сводную таблицу lands_objs и заполнить ее:Laravel 4 для многих отношений не работает, сводная таблица не найдена
Модели:
<?php
class Obj extends Eloquent
{
protected $guarded = array();
public static $rules = array();
public $timestamps = false;
public function land()
{
return $this->belongsToMany('Land');
}
<?php
class Land extends Eloquent
{
protected $guarded = array();
public static $rules = array();
public $timestamps = false;
public function objs()
{
return $this->belongsToMany('Obj');
}
}
Вот как я заполнить сводную таблицу следующие стандарты. Конечно земли, Objs и lands_objs таблицы существуют:
<?php
use Illuminate\Database\Migrations\Migration;
class CreateLandsObjsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('lands_objs', function($table) {
$table->integer('land_id');
$table->integer('obj_id');
});
}
}
С этой структурой, я должен быть в состоянии сделать благодаря красноречив:
$land = Land::find(1); //checked loads land fine
$objs = $land->objs; //--> HERE I TAKE THE ERROR
Но я беру ошибку:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'taylor.land_obj' doesn't exist
(SQL: select `objs`.*, `land_obj`.`land_id` as `pivot_land_id`, `land_obj`.`obj_id`
as `pivot_obj_id` from `objs` inner join `land_obj` on `objs`.`id` = `land_obj`.`obj_id`
where `land_obj`.`land_id` = ?) (Bindings: array (0 => 1,))
Разве Laravel не должен создавать таблицу lands_objs, несмотря на запрос на land_obj? Я что-то упускаю?
Большое спасибо.
Можете ли вы сказать мне, что разница между использованием 2 ** belongsTo ** методы и ** hasManyThrough ** метод? Я не понимаю, но использование hasManyTrough не работает для меня ... – kitensei
Учитывая сценарий, у автора много сообщений, а Post имеет много комментариев. У вас было бы 2, как правило, для методов (автор публикует и публикует комментарии), однако, скажите, что вы хотите выбрать все комментарии ко всем сообщениям для данного автора, тогда вы будете использовать hasManyThrough, потому что комментарии не являются напрямую связанные с Автором, но они связаны с Автором через другую модель (сообщение). Без hasManyThrough вам нужно будет выбрать все записи автора, затем зацикливать их на получение всех комментариев, затем выполнить какую-то обработку, чтобы получить их в формате/заказе и т. Д. – Brent