Wie filtere ich eine Pivot-Tabelle mit Eloquent?
Ich verwende eine Pivot-Tabelle für das Projekt, mit dem ich arbeite, um Arbeiten von Benutzern zu erhalten.
Z.B:User::find(1)->works
gibt mir die werke von user mit der id 1
Die Sache ist, dass ich diese Ergebnisse mit zusätzlichen Pivot-Daten filtern möchte.
So etwas wie:
User::find(1)->works->pivot->where('active',1)->get();
In welcher Spalte ich aktiv bin, habe ich in der Pivot-Tabelle user_works festgelegt.
Dies ist mein verwandter Teil meines User.php-Modells:
<?php
class User extends Cartalyst\Sentry\Users\Eloquent\User {
public function works() {
return $this->belongsToMany('Work','user_works')->withPivot('active')->withTimestamps();
}
}
Dies ist mein verwandter Teil meines Work.php-Modells:
<?php
class Work extends Eloquent {
public function users() {
return $this->belongsToMany('User','user_works')->withPivot('active')->withTimestamps();
}
}
Dies ist mein Pivot-Tabellenschema:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateUserWorksTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('user_works', function(Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned()->default(0);
$table->integer('work_id')->unsigned()->default(0);
$table->enum('active',array('0','1'))->default(1);
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('work_id')->references('id')->on('works')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('user_works');
}
}
Gibt es eine Möglichkeit, die Daten zu erhalten, ohne ein neues Modell für die Pivot-Tabelle zu erstellen?
Danke im Voraus,
Bearbeiten: Ich kann so filtern:
return User::find(1)->works()->where('user_works.active','=','1')->get();
Ich musste den Tabellennamen roh eingeben. Aber gibt es einen besseren Weg, dies zu erreichen, ohne es zu benutzen?