【发布时间】:2015-09-29 12:12:25
【问题描述】:
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`
广告模型
public function tags(){
return $this->belongsToMany('App\Models\Advertisements\AdvertisementTagsModel','advertisement_has_tags','fk_ad_id','id');
}
广告标签模型
public function advertisements(){
return $this->belongsToMany('App\Models\Advertisements\AdvertisementsModel','advertisement_has_tags','fk_tag_id','id');
}
广告控制器
public function index(){
$finder = AdvertisementsModel::find(1);
$tags=$finder->tags();
echo '<pre>';
var_dump($tags);
echo '</pre>';
}
当我进入调用AdvertisementsController 的index() 的/advertisements 路由时,它陷入了递归循环,我无法正确声明广告和标签之间的这种关系。
调用$tags()->get() 后得到以下sql 错误,不知道它是如何构建该查询的。为什么它构建aspivot_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)
有什么想法吗?
【问题讨论】:
-
你确定循环是因为关系吗?也许这与您的路线甚至 htaccess 有关?
-
当我只使用
var_dump('hello world');它转储hello world也许它的var_dump试图遍历结果? -
你的 mySQL 表示法让我有点困惑。字段名称是什么?也许您需要使用
tag_id而不是fk_tag_id和ad_id而不是fk_ad_id? -
fk_ad_id和fk_tag_id是Advertisements_has_tags的外键,将编辑以使其更清晰 -
首先尝试使用
$finder->tags()->get(),因为你使用的是方法访问
标签: mysql laravel foreign-keys eloquent