我需要使用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