我有3个表artist
, catalog
& cat_artist
(数据透视表)。当从我的目录表中检索一行时,我想获取所有关联的艺术家。我可以用raw sql来做这件事,但是因为使用laravel,所以感觉不对,因为它有很多功能可以做到这一点。所以,我有我的产品模型中的功能(产品模式引用目录表)来创建连接雄辩属于许多关系搜索为空
public function artists()
{
return $this->belongsToMany('App\Artist', 'cat_artist', 'LOOK_UP_TO_CAT_ID', 'LOOK_UP_TO_ARTIST_ID');
}
然后我把这个之前,我回到我的看法这给了我行从我的目录表
$product = Product::find($id);
现在我希望得到所有可能属于该产品藏汉所以艺术家我拨打以下
$artists = $product->artists()->get();
这将返回emtpy结果集
这里是从上面
array(2) {
[0]=> array(3) {
["query"]=> string(60) "select * from `catelogue` where `catelogue`.`id` = ? limit 1"
["bindings"]=> array(1) {
[0]=> int(96033)
}
["time"]=> float(0.91)
}
[1]=> array(3) {
["query"]=> string(289) "select `artist`.*, `cat_artist`.`LOOK_UP_TO_CAT_ID` as `pivot_LOOK_UP_TO_CAT_ID`, `cat_artist`.`LOOK_UP_TO_ARTIST_ID` as `pivot_LOOK_UP_TO_ARTIST_ID` from `artist` inner join `cat_artist` on `artist`.`id` = `cat_artist`.`LOOK_UP_TO_ARTIST_ID` where `cat_artist`.`LOOK_UP_TO_CAT_ID` is null"
["bindings"]=> array(0) { }
["time"]=> float(0.37) } }
才返回视图和数据传递给视图这一切发生的查询日志
查询一切是正确的除了这哪里它在寻找null
where `cat_artist`.`LOOK_UP_TO_CAT_ID` is null
它应该是这个
where `cat_artist`.`LOOK_UP_TO_CAT_ID` = ?
请帮忙。我想不通,我出了问题
编辑
这里是我的数据库表 - 淡化为显示所有的cols将是一种浪费
CREATE TABLE IF NOT EXISTS `artist` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`ARTIST` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `ARTIST` (`ARTIST`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE TABLE `catelogue` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`CAT_NO` varchar(255) DEFAULT NULL,
`TITLE` varchar(255) DEFAULT NULL,
`BARCODE` varchar(15) DEFAULT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `BARCODE` (`BARCODE`),
UNIQUE KEY `CAT_NO` (`CAT_NO`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `cat_artist` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`LOOK_UP_TO_CAT_ID` int(11) NOT NULL,
`LOOK_UP_TO_ARTIST_ID` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`ID`),
UNIQUE KEY `unique_index` (`LOOK_UP_TO_CAT_ID`,`LOOK_UP_TO_ARTIST_ID`),
KEY `LOOK_UP_TO_CAT_ID` (`LOOK_UP_TO_CAT_ID`),
KEY `LOOK_UP_TO_ARTIST_ID` (`LOOK_UP_TO_ARTIST_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
希望答案可以找到为什么它是把is null
在哪里,而不是product ID
此外,我已经测试了结果通过用product id
更换is null
婷原始的SQL和它的工作在phpMyAdmin这样生成的SQL是正确的高达is null
我是有缺陷的。我创建了一个测试数据库,将列更改为小写字母,并且工作正常!这很有用,但它现在提出了一个更大的问题,因为我不能只是把所有的col改成小写。有没有办法告诉laravel /雄辩不要将列名更改为小写,并使用名称格式? PS-这看起来像一个非常愚蠢的错误,因为我正在阐明将模式中的主键设置为'ID' – Mark
您不必将所有列更改为小写。改变'id'栏就够了。如果你真的需要使用你的新数据库,请尝试为模型使用增变器。 –
我以为mututors是正确的,但我错了。突变体改变了价值,而不是关键。经过更多的挖掘,我找到了正确的答案 – Mark