Laravel雄辩的关系

时间:2014-05-27 11:08:57

标签: php sql laravel eloquent

你能帮我解决这个问题吗?

答案模型

class Answer extends Eloquent {
    protected $primaryKey = 'ID';
    protected $table = 'answers';
    protected $fillable = array('customerID', 'agentID', 'status', 'date', 'urn_code', 'urn_id');

    public function customer(){
        return $this->hasOne('Customer');
    }
}

CUSTOMER MODEL

class Customer extends Eloquent {
    protected $connection = 'mysql';
    protected $table = 'leads';
    protected $primaryKey = 'cID';

    protected $fillable =  array('cID','title', 'first_name','last_name','address1', 'address2', 'post_code','city','phone_number');

    public function answers() {
        return $this->hasMany('Answer');
    }
}

ROUTE

Route::get('sales', function(){
    $sales = Customer::with('answers')->get()->paginate(15);

    foreach($sales as $sale)
    echo $sale->last_name . '<br />'; 

});   

这是我的错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'answers.customer_id'

2 个答案:

答案 0 :(得分:1)

确切地说错误是怎么回事。在answers表中,Laravel会自动查找customer_id列,在这种情况下它不存在。

如果您的客户ID列名称不同,则可以将其指定为hasMany()方法中的第二个参数:

public function answers() {
    return $this->hasMany('Answer', 'my_column');
}

此外,你应该在这里使用belongsTo关系,正如@razor所指出的那样。

答案 1 :(得分:0)

由于您使用的是自定义主键,因此需要指定本地密钥和外键。

public function answers() {
    return $this->hasMany('Answer', 'foreign_key', 'local_key');
}

也许您还必须更新您的答案模型(请查看您是否确实需要hasOne或belongsTo关系):

public function customer(){
    return $this->belongsTo('Customer', 'foreign_key', 'local_key');
}

您可以找到更多信息here