php - Laravel 5.2 定义自引用模型关系时使用原始查询?

标签 php mysql laravel eloquent

当调用CollegeMajor::with('majors')->get()时,我想应用以下原始sql查询: TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM Parent_id)parent_id 列。 Parent_id 中的值存储为 1:1234, 1:3121, 1:1332 等...因此我想删除冒号后的所有内容。 CollegeMajor 的主键是 id,这些值是像 1 这样的整数。我收到以下错误,因为 Laravel 认为原始查询是列的名称。在执行关系时,如何告诉 Laravel 将 sql 查询应用于 project_id 列?

CollegeMajor.php

class CollegeMajor extends Model {
   public function majors() {
     return $this->hasMany('App\Models\CollegeMajor', \DB::raw(TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM parent_id)))
                  ->where('entity', 'major');
   }
}

错误

Unknown column 'college_major.TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM parent_id)' in 'where clause' (SQL: select * from `college_major` where `entity` = major and `college_major`.`TRIM(TRAILING SUBSTRING_INDEX(parent_id, ':', -1) FROM parent_id)` in (1, 2, 3, 4, 5, 6, 7, 8))

学院专业表

id      name             entity   parent_id
1   College of Art       college     1234
2   College of Business  college     4567
3   Art History          major     1:1234
4   Asian Art            major     1:1234
5   Accounting           major     2:4567
6   Marketing            major     2:4567

如何让它返回?

[
  id: 1,
  name: 'College of Art',
  entity: 'college',
  parent_id: 1234,
  majors: [
    {
      id: 3,
      name: 'Art History',
      entity: 'major',
      parent_id: '1:1234'
    },
    {
      id: 4,
      name: 'Asian Art',
      entity: 'major',
      parent_id: '1:1234'
    }

  ]
  ....
]

最佳答案

hasMany() 的第二个参数是外键。所以你不能在那里定义你的查询。按如下方式定义你们的关系。

public function majors() { 
     return $this->hasMany('App\Models\CollegeMajor'); 
}

然后当您查询时使用 raw expressions这个。

CollegeMajor::with('majors')
     ->select(DB::raw('TRIM(TRAILING SUBSTRING_INDEX(parent_id, ":", -1) FROM parent_id))')
->where('entity', 'major')->get();

尚未测试。在我的手机上:)

关于php - Laravel 5.2 定义自引用模型关系时使用原始查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41928425/

相关文章:

php - Codeigniter 的正则表达式匹配

php - 从字符串中查找价格的正则表达式

mysql - 来自城市表的地理位置距离 SQL

linux - 我想在没有 PDO 的情况下使用 laravel

php - jQuery JSON 回调显示 'Undefined'

php - 向上滑动 DIV 容器

mysql - 这两个简单的 SQL 查询有什么区别?

php - 如何在 PHP 中使用 mysqli_multi_query 依次执行 2 个 SQL 查询

javascript - 为什么在我的 View 中看不到我的总计?

apache - 尝试修复时出错