我需要使用Eloquent過濾活動客戶端從路線。Laravel雄辯,從數據透視表列過濾
我正在使用我無法修改的第三方數據庫。在我的項目中,我有兩種模式:客戶端(客戶端)和Ruta(路線),它們有多對多的關係,所以我在模型中添加了belongsToMany關係。
我從數據透視表中感興趣的唯一列叫做DESACTIV,它告訴我客戶端是否停用路由。
魯塔型號:
class Ruta extends Model
{
protected $connection = 'mysql2';
protected $table = 'truta';
protected $primaryKey = 'CODIRUTA';
public function clientes(){
return $this->belongsToMany(Cliente::class, 'tcpcarut', 'CODIRUTA', 'CODICLIE')->withPivot('DESACTIV');
}
}
Cliente型號:
class Cliente extends Model
{
protected $connection = 'mysql2';
protected $table = 'tcpca';
protected $primaryKey = 'CODICLIE';
public function rutas(){
return $this->belongsToMany(Ruta::class, 'tcpcarut', 'CODICLIE', 'CODIRUTA')->withPivot('DESACTIV');
}
}
我需要的是獲得給出了具體的路線活動(或不激活)客戶端。
我已經做到了我的控制器上是這樣的:
$miRuta = Ruta::where('CODIRUTA','=',$ruta)->first();
$clientes = array();
foreach ($miRuta->clientes as $cliente){
if ($cliente->DESACTIV == 0){
array_push($clientes, $cliente->NOMBCLIE);
echo end($clientes)."<br/>";
}
}
,它工作正常,但我不認爲這是優雅的。我知道這可以通過雄辯實現,我只是爲了小事而不知道如何去做。
也許我可以在clientes加濾網方法對我魯塔模型,這將只返回有效客戶。
或者,也許這可能是最好添加在Cliente模型的方法,像isDeactivated
我知道這聽起來就像我知道我在說什麼,但我需要有人握住我的手,我只是小聲說:/。例子將不勝感激。
我從來沒有聽說過wherePivot的,那就是當你啓動一個項目,而不花時間瞭解你正在使用什麼會發生什麼。正如你所看到的,我實現了我所知道的最快解決方案,所以我可以繼續推進這個項目。謝謝,我的代碼更清潔這種方式:D。 – Adocad