Php 有口才,在人际关系中寻找

Php 有口才,在人际关系中寻找,php,laravel,eloquent,Php,Laravel,Eloquent,通过关系搜索字段值的正确过程是什么(如在中,名称如%acme%) 假设我们有一个客户机模型,它属于公司。现在我想通过$client->company->name字段过滤(搜索) 我尝试了Client::where('company.name','LIKE','acme')->get() 但它不起作用 我已经准备好了$includes=array('company') 编辑:忘了提到我的关系正在运作 谢谢大家! 尝试使用即时加载: $client = Client::with(array('com

通过关系搜索字段值的正确过程是什么(如在
中,名称如%acme%

假设我们有一个
客户机
模型,它属于
公司
。现在我想通过
$client->company->name
字段过滤(搜索)

我尝试了
Client::where('company.name','LIKE','acme')->get()

但它不起作用

我已经准备好了<代码>$includes=array('company')

编辑:忘了提到我的关系正在运作


谢谢大家!

尝试使用即时加载:

$client = Client::with(array('company' => function($query) {
    $query->where('name', 'LIKE', 'acme');
}))->first();

现在我有了更好的理解-Laravel Earge loading没有使用连接查询,这与其他ORM方法不同,可以说使用Fluent query Builder结构将Elount与连接一起使用是可能的。因此,您将无法通过一个相关模型的价值进行雄辩的搜索。使用Fluent接口进行连接:


您仍然可以通过执行Client::join(…)将fluent接口与您的elequent模型一起使用。。。。
对于这类功能,你应该看一些类似于条令的东西。尽管如此,要为更陡峭的学习曲线做好准备

您可以通过在eloquent中使用join方法来实现这一点

Client::join('companies AS company', 'clients.company_id', '=', 'company.id')
       ->select('clients.*', 'company.name AS company_name')
       ->with('company')
       ->where(function($query) {
           $query->where('company_name', 'LIKE', 'acme');
       })
       ->get();

如您所见,我将companys表加入到客户机中,以便在返回数据上有一个公司名称。因此,您可以轻松搜索到公司名称为“acme”的客户机。

不应该$includes=array('company'))在模型中是一样的吗?从文档中-注意:使用with将覆盖模型$includes。你不明白我的意思…为什么我要覆盖已经设置和工作的东西…现在我有了更好的理解-Laravel Earge loading不使用联接查询,这与其他ORM方法不同,据说它仍然存在可以使用Fluent查询生成器结构将Eloquent与联接一起使用。因此,您将无法使用Eloquent按相关模型的值进行搜索。使用Fluent接口进行联接:您仍然可以通过执行Client::join将Fluent接口与您的elequent模型一起使用(……对于这类功能,你应该看一些类似于条令的东西。不过,要为更陡峭的学习曲线做好准备。