【问题标题】:Select all rows from pivot table从数据透视表中选择所有行
【发布时间】:2018-07-06 22:29:16
【问题描述】:

我在 Slim 框架上使用 Eloquent 选择数据透视表行时遇到了一些问题。我有以下关系:

tb_bet (id, ...)
tb_fixture (id, ...)
tb_bet_fixture (bet_id, fixture_id,状态)

型号:

Bet.php:

use \Illuminate\Database\Eloquent\Model;

class Bet extends Model {

    protected $connection = 'client';
    protected $table = 'tb_bet';
    public $timestamps = false;

    public function fixtures() {
        return $this->belongsToMany('Fixture')->withPivot('status');
    }
}

Fixture.php:

use \Illuminate\Database\Eloquent\Model;

    class Fixture extends Model {

        protected $connection = 'client';
        protected $table = 'tb_fixture';
        public $timestamps = false;

        public function bets() {
            return $this->belongsToMany('Bet')->withPivot('status');
        }
    }

我可以查询一个灯具的所有投注和一个投注的所有灯具,但我真正需要的是这样做:select * from tb_bet_fixture where bet_id = 1。所以我有一个给定赌注的所有夹具状态的列表。有点像这样:

bet:{
  'id': 1,
  'pivot': [
      {bet_id: 1, fixture_id: 2, status: true},
      {bet_id: 1, fixture_id: 3, status: false},
      {bet_id: 1, fixture_id: 4, status: true}
  ]
}

我曾想过使用原始查询,但每当我尝试在控制器上声明 use Illuminate\Database\Capsule\Manager as DB; 并使用 $users = DB::select('select * from tb_users'); 作为测试时,我都会收到 Database [default] not configured. 错误并且我不知道如何访问“$capsule”包含当前连接的变量(是的,我使用到不同数据库的多个连接)并在中间件上定义。无论如何,我将不胜感激。

【问题讨论】:

  • 更新了我的答案

标签: php laravel eloquent slim


【解决方案1】:

选项 1:创建模型

如果我要使用枢轴作为模型。我会为数据透视表创建一个模型。这样就可以直接查询表了。像这样。

use \Illuminate\Database\Eloquent\Model;
use App\Bet;

class BetFixture extends Model 
{
    protected $table =‘tb_bet_fixture’;

    public function bets() 
    {
        return $this->hasMany(Bet::class);
    }
} 

这将比查询更容易和更清晰,因为你直接从一个枢轴中选择,就像这样

select * from tb_bet_fixture where bet_id = 1. 

选项 2:使用夹具选择,具体投注

如果您想通过灯具选择具有特定投注的灯具,您可以这样查询。

Fixture::with(‘bets’ => function($query) use ($betId) {
    $query->where(‘tb_bet_fixture.bet_id,$betId);
});

【讨论】:

  • 我刚刚看到了答案,但模型方法是昨天解决我问题的方法。感谢您的帮助。
  • 为数据透视表创建模型正是我需要听到的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
相关资源
最近更新 更多