我有一个Artist模型和一个Item模型。
class Artist extends Model {
protected $table = 'contactsdata';
protected $primaryKey = 'c_id';
public function artworks() {
return $this->hasMany('App\Item', 'c_id', 'c_id');
}
}
class Item extends Model {
protected $table = 'stock';
protected $primaryKey = 's_id';
}
在我的ArtistsController中,我有这段代码:
public function show($id)
{
DB::enableQueryLog();
$artist = Artist::find($id);
$artworks = Artist::find($id)->artworks;
dd(DB::getQueryLog(), $artworks->toArray());
}
在数据库中有许多记录有资格填充$ artwork。但这是我的dd()输出:
array:2 [▼
0 => array:3 [▼
"query" => "select * from `contactsdata` where `contactsdata`.`c_id` = ? limit 1"
"bindings" => array:1 [▼
0 => "2242"
]
"time" => 2.59
]
1 => array:3 [▼
"query" => "select * from `stock` where `stock`.`c_id` is null"
"bindings" => []
"time" => 2.52
]
]
[]
由于某种原因,对于第二个或关系查询,if字段(c_id)设置为null。有任何想法吗?救命啊!
答案 0 :(得分:1)
为了实现你想要的,你应该在这里使用:
$artist = Artist::find($id);
$artworks = $artist->artworks;
而不是:
$artist = Artist::find($id);
$artworks = Artist::find($id)->artworks;
答案 1 :(得分:1)
谢谢大家。我自己解决了这个问题。雄辩的关系字段名称区分大小写。出于某种原因,我的数据库表具有以大写形式命名的所有字段(在其方案中)。一旦我将hasMany参数更改为'C_ID','C_ID'一切正常。
非常值得知道Eloquent关系字段名称是CASE SENSITIVE。