2017-07-14 46 views
0

我试图通过列的belongsToMany关系中的表搜索数据表。在这种情况下,表格是tagsLaravel数据表搜索belongsToMany名称

这里是有问题的表格:

Schema::create('leads', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->text('data'); 
    $table->timestamps(); 
}); 

Schema::create('tags', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('name'); 
    $table->string('color'); 
    $table->timestamps(); 
}); 

Schema::create('tag_lead', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('lead_id'); 
    $table->integer('tag_id'); 
}); 

这里是我的模型代码:

class Lead extends \Eloquent 
{ 
    public function tags() 
    { 
     return $this->belongsToMany('App\Tag'); 
    } 
} 

这里是我的控制器代码:

$leads = Lead::with('tags')->get(); 

return Datatables::of($leads) 
    ->filterColumn('tags', function($query, $keyword) { 
     $query->whereRaw('tags.name like ?', ['%'.$keyword.'%']); 
    }) 
    ->make(true); 

这里是我的JS代码:

$('#leads-datatable').DataTable({ 
    ajax: '{{ route('backend.leads.datatable') }}', 
    columns: [ 
     { data: 'id' }, 
     { data: 'data' }, 
     { data: 'tags', sortable: false }, 
     { data: 'created_at' }, 
     { data: 'updated_at' } 

    ] 
}); 

这不起作用,并产生错误mb_strtolower() expects parameter 1 to be string, array given

我只希望datatables搜索每个潜在顾客的所有标签名称。我该怎么做呢?

+0

'“%” $关键字'%''尽量不要将它作为数组传递 – Nour

+0

'$ keyword'的类型是什么?字符串或数组? –

回答

0

我最终只是不得不从一个集合切换到一个查询:

$leads = Lead::with('tags') 
     ->select('leads.*') 
     ->leftJoin('lead_tag', 'lead_tag.lead_id', '=', 'leads.id') 
     ->leftJoin('tags', 'tags.id', '=', 'lead_tag.tag_id') 
     ->groupBy('leads.id'); 

    $dt = Datatables::of($leads); 
0

如果我正确理解这个问题,您正在寻找所有leadstag名称的$keyword变量?如果是这样的话,你只需要改变控制器代码:

$leads = Lead::whereHas('tags', function($q) use($keyword) { 
    $q->where('name', '=', $keyword); 
}) 
->with('tags') 
->get(); 

return $leads;