未找到 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 关系