2013-05-05 7 views
6

現在、Laravel 4との間にnの関係があります。両方のコンポーネントを使用してテーブルを参照しているピボットテーブルにエラーがあります。単数の名前で私は、ピボットテーブル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'); 
     } 
    } 

は私が基準以下のピボットテーブルを読み込む方法です。私は雄弁に感謝を行うことができるはずこの構造により

<?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'); 
     }); 
    } 
} 

を::もちろん土地、OBJSとテーブルをlands_objsが存在し

$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,)) 

land_objに迷惑をかけてもLaravelはテーブルlands_objsを作成してはいけませんか?何か不足していますか?

ありがとうございます。

答えて

13

ピボットテーブルがあなたのケースになるようアルファベット順に、それがリンクされたテーブル名の単数形バージョンである必要があります。

land_objではなくlands_objs

あなたが本当にデフォルトを使用したくない場合

return $this->belongsToMany('Obj', 'lands_objs'); 

:命名規則はまた、あなたのモデルでbelongsToManyコールの第二のparamとしてテーブル名を指定することができます詳細については、3210

docs here

+0

あなたは2つの**のbelongsTo **方法と** hasManyThrough **メソッドを使用しての違いに何を教えてもらえますを参照してください?私は理解していませんが、hasManyTroughを使用して私のために動作しません... – kitensei

+0

シナリオが与えられた著者は多くの投稿を持ち、投稿は多くのコメントを持っています。あなたは2つのメソッドに通常属しています(投稿してコメントに投稿する作者)。しかし、コメントがないので、hasManyThroughを使用すると、すべての投稿のすべてのコメントを選択したいとします。著者に直接関連していますが、別のモデル(投稿)を介して著者に関連しています。 hasManyThroughを使用しないと、著者の投稿をすべて選択してから、すべてのコメントを取得してループしてから、後に行った書式/注文などの処理に何らかの処理を行う必要があります。 – Brent

関連する問題