数据表中的Laravel关系导致getForeignKey()错误

时间:2019-02-13 17:49:08

标签: php laravel datatables

我已经尝试了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列搜索与关系数据一起使用?

1 个答案:

答案 0 :(得分:0)

public function address() {
   return $this->hasOne('App\Address', 'customer_id', 'id');
}
public function customer() {
   return $this->belongsTo('App\Customer', 'id', 'customer_id');
}