我已经尝试了1天,以使Laravel列搜索可以处理关系数据。
我有两个表“ customers”和“ addresses”,一个Customer模型和一个Address模型以及关系。
关系测试:
https://i.imgur.com/z8SR004.png
地址模型关系:
public function customer(){
return $this->belongsTo('App\Customer');
}
客户模型关系:
public function address()
{
return $this->hasOne('App\Address');
}
数据表控制器:
return DataTables::of($customers)
->addColumn('address', function (Customer $customer) {
return $customer->address->name;
})
->make(true);
地址架构:
Schema::create('addresses', function (Blueprint $table) {
$table->increments('id');
$table->integer('customer_id')->unsigned()->index();
$table->string('name');
$table->string('city');
$table->foreign('customer_id')->references('id')->on('customers')->onDelete('cascade');
$table->timestamps();
});
客户架构:
Schema::create('customers', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('alias');
$table->decimal('multiplier',8,2);
$table->string('email');
$table->timestamps();
});
JS:
columns: [
{ data: 'id', name: 'id' },
{ data: 'name', name: 'name'},
{ data: 'address', name: 'address.name'},
{ data: 'multiplier', name: 'multiplier' },
{ data: 'created_at', name: 'created_at' }
],
对我来说,一切都很好,而且在每列过滤关系数据时,我真的找不到问题。
我得到的错误是:
Call to undefined method
Illuminate\Database\Eloquent\Relations\HasOne::getForeignKey()
解决此问题的一种方法是在控制器中添加->get()
,但这将停止AJAX调用中的任何数据表分页,并在查询和输出整个表时使一切变慢。
实时结果:
http://ec2-35-178-196-9.eu-west-2.compute.amazonaws.com(在“城市”列的底部写点内容,然后按Enter->选中“网络”标签并打开500错误的Ajax链接)或仅切换页面。
如何使Laravel列搜索与关系数据一起使用?
答案 0 :(得分:0)
public function address() {
return $this->hasOne('App\Address', 'customer_id', 'id');
}
public function customer() {
return $this->belongsTo('App\Customer', 'id', 'customer_id');
}