雄辩地通过一个相关表关联两个表

时间:2019-02-05 22:27:39

标签: php laravel eloquent

当我尝试使用不同的运算符时,由于逻辑混乱,我似乎很难理解如何正确查询。

无论如何,我有三个表:Customer,Cpe,Equipment。我需要设备中的数据,但为此,我必须使用“客户”将其与Cpe相关联,然后将该表与“设备”相关联。

关系如下:

客户有很多Cpe客户ID>客户ID Cpe具有一个设备equequid> equiquit

除Cpe表外,没有其他与客户和设备相关的信息。

我特别想选择Customer.customerid,Customer.name,Equipment.nickname,Customer.customerstatus,Customer.installationdate。但我也只想选择拥有Equipment.nickname LIKE%SIM%的客户。所以我有:

$baicell_customers = Customer::with('Cpe')
->with('Cpe.Equipment')
->select('Customer.customerid', 'Customer.name', 
'Equipment.nickname', 'Customer.customerstatus', 
'Customer.installationdate' => function($query){
$query->where('Equipment.nickname', 'LIKE', '%SIM%');
})
->orderBy('Customer.name', 'asc');
->get();

但是,这让我一无所获。我总体上并不擅长将一个表与另一个表相关联,而且我不得不使用一个相关表从另一个表中获取信息这一事实对我来说简直是小菜一碟,因此对您的帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

这基本上是很多对很多,您可以通过以下方法获得它。通常,在Laravel中,您需要获取模型并使用数据来执行某些操作,除非您处于高度面向企业的系统中,否则不要使用selects来执行操作。您的命名约定也已关闭,因为cpe是数据透视表,基本上参见Laravel Many to Many

public class Customer
{
    public equipments()
    {
        return $this->belongsToMany('App\Equipment', 'INSERT CPE TABLE NAME', 'customerid', 'equipid ');
    }
}

$customer = Customer::with('equipments')->all()->first();


foreach($customer->equipments as $equipment)
{
    $equipment->nickname;
}

即使您说cpe只能拥有一台设备,但设计是多对多的,要避免这种情况,您可以做到。

$equipment = $customer->equipments->first();

答案 1 :(得分:0)

所以我暂时放弃了以雄辩的风格进行此操作。花了一些时间,但我能够使DB :: connection('table')查询正常工作。这是代码:

$baicell_customers = DB::connection('azotel')->select("SELECT distinct customers.name, customers.customerid as id, customers.installationdate, customers.customerstatus[1] as status, equipment.nickname as ap FROM  cpe INNER JOIN customers on customers.customerid = cpe.customerid INNER JOIN equipment on equipment.equipid = cpe.equipid WHERE equipment.nickname LIKE '%SIM%' order by name ASC");

这完美地达到了预期的效果,但是我目前无法在Eloquent中正常工作,但是现在还可以。如果这可以帮助任何人弄清Eloquent版本,我仍然很想听听。否则,此问题已解决。