2015-09-29 14 views
2

MYSQL遞歸循環時嘗試提取模型

#advertisements 
`id` -> primary key 
`title` -> varchar(100) 

#advertisementsTags 

id - >主鍵 tag - > VARCHAR(40)

#advertisements_has_tags 
`tag_id` 
`ad_id` 
##Foreign keys 
fk_tag_id for column `tag_id` points to `AdvertisementsTags`.`id` 
fk_ad_id for column `ad_id` points to `Advertisements`.`id` 

AdvertisementsModel

public function tags(){ 
     return $this->belongsToMany('App\Models\Advertisements\AdvertisementTagsModel','advertisement_has_tags','fk_ad_id','id'); 
    } 

AdvertisementTagsModel

public function advertisements(){ 
     return $this->belongsToMany('App\Models\Advertisements\AdvertisementsModel','advertisement_has_tags','fk_tag_id','id'); 
    } 

AdvertisementsController

public function index(){ 
     $finder = AdvertisementsModel::find(1); 
     $tags=$finder->tags(); 
     echo '<pre>'; 
      var_dump($tags); 
     echo '</pre>'; 
    } 

當我進入/advertisements航線它調用的AdvertisementsControllerindex()它落入一個遞歸循環,我只是不能設法正確聲明這種關係廣告和標籤之間。

調用$tags()->get()之後得到了以下sql錯誤,不知道它是如何構建該查詢的。爲什麼它建立as pivot_fk_ad_id``

SQLSTATE[42S22]: Column not found: 1054 Unknown column 
'advertisement_has_tags.fk_ad_id' in 'field list' (SQL: select 
`advertisement_tags`.*, `advertisement_has_tags`.`fk_ad_id` as `pivot_fk_ad_id`, 
`advertisement_has_tags`.`id` as `pivot_id` from `advertisement_tags` inner 
join `advertisement_has_tags` on `advertisement_tags`.`id` = 
`advertisement_has_tags`.`id` where `advertisement_has_tags`.`fk_ad_id` = 1) 

有什麼想法?

+0

你確定循環是因爲關係嗎?也許這是你的路線或甚至htaccess的東西? – amosmos

+0

當我只是使用'var_dump('hello world');'它傾銷'hello world'或許它的'var_dump'試圖遍歷結果? – Gntem

+1

你的mySQL表示法讓我困惑了一下。什麼是字段名稱?也許你需要使用'tag_id'而不是'fk_tag_id'和'ad_id'而不是'fk_ad_id'? –

回答

0

經過很多努力掙扎後,我做了以下更改。

AdvertisementsModel切換參數'ad_id','tag_id');

AdvertisementTagsModel切換參數'tag_id','ad_id');

AdvertisementsController

public function index(){ 
     $finder = AdvertisementsModel::find(1); 
     $tags=$finder->tags()->get(); 
     echo '<pre>'; 
      foreach($tags as $t){ 
      echo $t->tag."\n"; 
      } 
     echo '</pre>'; 
    } 

到糟糕,laravel沒有提供足夠的資料..