现在用laravel 5.3 的 belongsToMany,总感觉有点奇怪,多对多查出来只有一条记录,下面贴代码。
-
PackageIndex
id name etc...
-
PackageProject
id name etc...
-
PackageProjectIndex
package_id project_id
在PacakgeIndex中.
public function projects(){
return $this->belongsToMany('PackageProject','package_project_index','package_id','project_id');
}
attach和detach都没问题, 如
PackageIndex::first()->attach([1,2,3]);
但是管理查询的时候 , 不管project有多少个,
PackageIndex::first()->projects
出来的始终只有一个。求助!
主键写反了
应该写成:
参见: 多对多
题主没看懂,我再解释一下问题出在哪
我们假设a、b两个表,表名为as、bs,主键分别为a_id、b_id,中间表为a_b(a_id,b_id);
那么根据官方给出的例子,应该写成:
注意看第一个参数和第四个参数的对应关系。第三个参数应该为本Model的主键,第四个参数应该为第一个参数Model的主键。 顺序绝对不能反。而题主的问题就是这两个参数理解反了。
至于题主在评论里说改过来了就一个结果都没有了,那恰恰说明了你已经看到了错误,而不是继续在错误的路上行走。
建议测试时将a、b表测试数据主键设置为不重复的。不然a_id也是1、2、3,b_id也是1、2、3,中间表一看,你自己根本搞不清哪个是哪个。attach的时候就关联错了,后面获取更是一团糟,云里雾里分不清id是a还是b了。
另外建议开启mysql查询日志,对照日志查看sql语句是什么样的,就能很快定位问题了。