私はEloquentを使用してルートからアクティブなクライアントをフィルタリングする必要があります。Laravel Eloquent、ピボットテーブルの列からフィルタリングする
私は変更できないサードパーティのデータベースを使用しています。私のプロジェクトでは、Cliente(クライアント)と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/>";
}
}
そして、それが正常に動作しますが、私はそれはエレガントだとは思いません。私はこれがEloquentを通して実現できることを知っています、私はそれにノブをつけて、それをやる方法を知らないだけです。
それが唯一のアクティブなクライアントを返しますので、たぶん私は、私のルタモデルにclientes方法でフィルタを追加することができます。
それともそれはは私が話しているか知っているよう
が、私はそれが音を知ってisDeactivatedのように、Clienteモデルにメソッドを追加することが最善かもしれないが、私は誰かを必要とします私の手をこれにつけるために、私はEloquentとあまりにも戸惑っています:/。例は非常に高く評価されるだろう。
私はどこのピボットについて聞いたこともありません。それは、あなたが作業していることを知る時間を取らずにプロジェクトを開始したときに起こります。あなたが見たように私は自分の知るところで最も速い解決策を実装しましたので、プロジェクトを進めていくことができました。ありがとう、私のコードはこの方法ではるかにクリーンです:D。 – Adocad