当两个表与索引上的相同列名相关时,我无法加入表,直到我更改主表字段“id'”。我不能使用查询生成器;必须找到雄辩的解决方案。
主表,
product_id, ...
子表,
sub_product_id, product_id, ...
这些是模特,
require_once(APPPATH . 'models/connection.php');
use Illuminate\Database\Eloquent\Model as Eloquent;
class Credit extends Eloquent {
public $timestamps = false;
public $table = 'tbl_credit';
public function periods() {
return $this->hasMany('Period', '**product_id**');
}
}
和子模型,
require_once(APPPATH . 'models/connection.php');
use Illuminate\Database\Eloquent\Model as Eloquent;
class Period extends Eloquent {
public $timestamps = false;
public $table = 'tbl_credit_period';
public function credit() {
return $this->belongsTo('Credit', '**product_id**');
}
}
代码就是那样
Credit::with('periods')->get()->toArray()
将结果显示为
array(product_id => .., periods => null)
如果我将信用表主键从product_id
更改为id
,那么它可以正常工作。
答案 0 :(得分:0)
问题不在于命名第一个表键和第二个表外键相同,但是您不符合Eloquent模型的命名约定。
如果您没有明确指定,则Eloquent将检查id
作为主键,因此这应该对您有用(尽管我建议不要将这些列命名为相同):
// Credit model
protected $primaryKey = 'product_id';
要说清楚 - 您的代码不是连接表,而是使用where in
子句运行另一个查询,Laravel应该正确获取相关的行。问题在于稍后将获取的结果与其Credit
父母进行匹配,这就是您在那里得到null
的原因。