外键相同时,Eloquent Relation失败

时间:2014-05-12 07:36:28

标签: eloquent

当两个表与索引上的相同列名相关时,我无法加入表,直到我更改主表字段“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,那么它可以正常工作。

1 个答案:

答案 0 :(得分:0)

问题不在于命名第一个表键和第二个表外键相同,但是您不符合Eloquent模型的命名约定。

如果您没有明确指定,则Eloquent将检查id作为主键,因此这应该对您有用(尽管我建议不要将这些列命名为相同):

// Credit model
protected $primaryKey = 'product_id';

要说清楚 - 您的代码不是连接表,而是使用where in子句运行另一个查询,Laravel应该正确获取相关的行。问题在于稍后将获取的结果与其Credit父母进行匹配,这就是您在那里得到null的原因。