php - 如何进行受集合约束的查询

标签 php mysql laravel

我在 session 中存储了以下集合:

  "trienios" => array:4 [▼
    0 => {#276 ▼
      +"curso": "TGEI"
      +"trienio": "2014-2017"
    }
    1 => {#277 ▼
      +"curso": "TGEI"
      +"trienio": "2015-2018"
    }
    2 => {#278 ▼
      +"curso": "TGEI"
      +"trienio": "2016-2019"
    }
    3 => {#279 ▼
      +"curso": "TGEI"
      +"trienio": "2013-2016"
    }
  ]

我想进行一个受集合中存在的值约束的查询。这是我实际有的查询:

$alunos = Aluno::with('trienio.curso')->select('alunos.*')->get();

这将为我提供所有 alunos 及其相关记录(curso 和 trienio)的列表。

以下是相关表的架构:

光标

+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| curso | varchar(255)     | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+

特里尼奥斯

+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| id           | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| data_trienio | varchar(255)     | NO   |     | NULL    |                |
| curso_id     | int(11)          | NO   |     | NULL    |                |
| oe_id        | int(11)          | NO   |     | NULL    |                |
+--------------+------------------+------+-----+---------+----------------+

铝诺斯

+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| id_cartao  | int(10) unsigned | NO   | UNI | NULL    |                |
| nome       | varchar(255)     | NO   |     | NULL    |                |
| email      | varchar(255)     | NO   | UNI | NULL    |                |
| trienio_id | int(11)          | NO   |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+

以下是模型文件上的相关关系:

Aluno.php

public function trienio()
{
    return $this->belongsTo('App\Trienio');
}

Trienio.php

public function curso()
{
    return $this->belongsTo('App\Curso');
}

Curso.php

public function trienio()
{
    return $this->hasMany('App\Trienio');
}

就像我在标题中所说,我想让查询受集合约束,最好的方法是什么?

P.S - 我只想获取受集合约束的 alunos(及其各自的关系)。

最佳答案

像这样的事情应该可以解决问题:

$alunos = Aluno::with('trienio.curso');

foreach ($trienios as $trienio) {
    $alunos->orWhereHas('trienio', function ($query) use ($trienio) {
        $query->where('data_trienio', $trienio['trienio'])
            ->whereHas('curso', function ($query) use ($trienio) {
                $query->where('curso', $trienio['curso']);
            });
    });
}

$alunos->get();

上面假设已经使用 session 中的数据设置了 $trienios

希望这有帮助!

关于php - 如何进行受集合约束的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44842970/

相关文章:

javascript - 关闭弹出窗口后如何重新加载现有页面

javascript - 如何读取两个对象的Json?

php - 在 css 中自动移动图像的简单方法

php - 使用一个已知变量对 3 个表进行内连接

php - 获取观看次数(唯一观众和唯一视频)

php - Laravel 如何从非主键创建外键约束

php - 在 Laravel 图表上显示 2 位小数点

php - HTML 表格中的每一行都可以编号吗?

php - Laravel 5.8 使用子域作为 domain.com/api 旁边的 API 端点

mysql - 另一个数据库设计难题