未找到 Laravel Eloquent 关系列

Posted

技术标签:

【中文标题】未找到 Laravel Eloquent 关系列【英文标题】:Laravel Eloquent Relationship column not found 【发布时间】:2014-05-27 11:08:56 【问题描述】:

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

答案模型

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');
    

客户模型

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::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'

【问题讨论】:

你能展示你的模型的迁移吗? 【参考方案1】:

这正是错误所说的。在您的 answers 表中,Laravel 会自动查找 customer_id 列,但在这种情况下它不存在。

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

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

此外,正如@razor 所指出的,您可能应该在这里使用belongsTo 关系。

【讨论】:

另外,在Answer 模型中,在customer() 关系中应该是belongsTo()(而不是hasOne()【参考方案2】:

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

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

您可能还必须更新您的 Answer 模型(请检查您是否真的需要 hasOne 或 belongsTo 关系):

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

您可以找到更多信息here。

【讨论】:

以上是关于未找到 Laravel Eloquent 关系列的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 使用 Eloquent 从连接关系模型中选择特定列

未定义的属性:Illuminate\Database\Eloquent\Relations\BelongsTo::$status。 Laravel 5.5 关系

Laravel Eloquent 按关系表列排序

Laravel Eloquent按关系表列排序

多个 Laravel Eloquent 关系未显示来自所有关系的数据

Laravel Eloquent 模型按局部列和关系模型列值排序