gpt4 book ai didi

laravel - 如何使用Eloquent过滤数据透视表?

转载 作者:行者123 更新时间:2023-12-03 09:21:35 25 4
gpt4 key购买 nike

我在正在使用的项目上使用数据透视表来获取用户作品。

例如:User::find(1)->works给我ID为1的用户作品。

问题是我想用额外的数据透视表数据过滤此结果。

就像是:

User::find(1)->works->pivot->where('active',1)->get();

在其中是我在user_works数据透视表中设置的列。

这是我的User.php模型的相关部分:

<?php

class User extends Cartalyst\Sentry\Users\Eloquent\User {

public function works() {
return $this->belongsToMany('Work','user_works')->withPivot('active')->withTimestamps();
}

}

这是我的Work.php模型的相关部分:

<?php

class Work extends Eloquent {

public function users() {
return $this->belongsToMany('User','user_works')->withPivot('active')->withTimestamps();
}
}

这是我的数据透视表架构:

<?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');
}

}

有什么方法可以在不为数据透视表创建新模型的情况下获取数据?

提前致谢,

编辑:
我可以这样过滤:

return User::find(1)->works()->where('user_works.active','=','1')->get();

我必须输入原始表名称。但是,有没有一种更好的方式来获得它而不使用它呢?

最佳答案

Laravel 4.1带来了本地wherePivotorWherePivot methods,这直接解决了我的问题。

关于laravel - 如何使用Eloquent过滤数据透视表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18538527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com