2013-05-05 34 views
6

Şu anda bir problemle yaşıyorum: Laravel 4 ile ilişki, her iki bileşenin olduğu bir tabloyu sorgulayan bir pivot tablo hatası alıyorum tekil isimde. Bir pivot tablo lands_objs oluşturmak ve bunu doldurmak:Laravel 4 pek çok ilişkiye çalışmıyor, pivot tablo bulunamadı

Modeller şunlardır: Ben standartlar aşağıdaki pivot tablo doldurmak nasıl İşte

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

olduğunu. Ben dokunaklı sayesinde yapmak mümkün olmalıdır bu yapısıyla

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

: Elbette toprakları, OBJS ve lands_objs tablolar var

$land = Land::find(1); //checked loads land fine 
$objs = $land->objs; //--> HERE I TAKE THE ERROR 

Ama yanılma:

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, land_obj'dan alıntı yapmasına rağmen, lands_objs tablosunu yaratmamalı mı? Bir şey mi eksik?

Çok teşekkürler.

cevap

13

pivot tablo sizin durumunuzda alfabetik sırayla o bağlanıyor tablo isimleri tekil versiyonu, bu yüzden olmalı:

land_obj ziyade lands_objs

Gerçekten varsayılan kullanmak istemiyorsanız

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

ve

: adlandırma ayrıca modellerinde belongsToMany çağrı üzerine 2 param olarak tablo adını belirtebilirsiniz Daha fazla bilgi için

docs here

+0

Eğer 2 ** belongsTo ** yöntem ve ** hasManyThrough ** yöntemi kullanarak arasındaki fark ne olduğunu söyleyecek misin görüyor musunuz? Anlayamıyorum ama hasManyTrough kullanmak benim için işe yaramıyor ... – kitensei

+0

Bir Yazar bir çok Gönderi ve bir Mesajın birçok yorumu vardır. Genellikle 2 yönteme aittir (yazar, yorum yazabilir ve yayınlayabilir), ancak belirli bir yazarın tüm yayınlarındaki tüm yorumları seçmek istediğinizi söylerseniz, o zaman yorumlarınız olmadığı için hasManyThrough kullanırsınız. Yazar ile doğrudan ilişkilidir, ancak başka bir model (post) yoluyla Yazar ile ilgilidir. HasManyThrough olmadan, tüm yazarın gönderilerini seçmeniz, ardından tüm yorumları almanız, sonra da onları, sonradan olduğunuz biçim/sipariş vb. Haline getirmek için bir çeşit işleme yapmanız gerekir. – Brent