在为父表应用where子句时发出问题:Laravel 5.2

时间:2016-05-06 08:01:13

标签: php laravel laravel-5.1 laravel-5.2

以下是tblagegroup的架构

CREATE TABLE `tblagegroup` (
  `AgeGroupID` tinyint(3) UNSIGNED NOT NULL,
  `MinAge` int(11) NOT NULL,
  `MaxAge` int(11) NOT NULL
);

以下是tblcontentlibrary

的架构
CREATE TABLE `tblcontentlibrary` (
  `ContentLibraryID` int(11) NOT NULL,
  `AgeGroupID` tinyint(3) UNSIGNED NOT NULL
);

AgeGroupID在两个表中都相关联。

我试图从tblcontentlibrary获取那些记录,其中MinAge> = 2且MaxAge是< = 4

以下是我的尝试。

\App\Models\ContentLibraryModel
::with('AgeGroup')
->where('MinAge', '>=', $years)
->where('MaxAge', '<=', $years)
->get();

我收到以下错误。

  

未找到列:1054'where子句'中的未知列'MinAge'(SQL:   从tblcontentlibrary中选择*,其中MinAge&gt; = 0且MaxAge&lt; =   0)

我错过了什么吗?

3 个答案:

答案 0 :(得分:1)

如果您的关系正确,this should work

\App\Models\ContentLibraryModel::with(['AgeGroup' => function ($query) use ($years) {
    $query->where('MinAge', '>=', $years)->where('MaxAge', '<=', $years);
}])->get();

答案 1 :(得分:0)

使用whereHas根据关系调整退货。

\App\Models\ContentLibraryModel::with('AgeGroup')
    ->whereHas('AgeGroup', function ($query) use ($years) {
        $query->where('MinAge', '>=', $years);
        $query->where('MaxAge', '<=', $years);
    })
    ->get();

这只会返回AgeGroup符合该条件(whereHas)的模型,并且还会返回AgeGroup关系(with)。

更多信息:
https://laravel.com/docs/5.1/eloquent-relationships

答案 2 :(得分:0)

我的工作查询如下。

\App\Models\ContentLibraryModel
    ::selectRaw('CL.*, AG.MinAge, AG.MaxAge')
    ->from('tblcontentlibrary as CL')
    ->join('tblagegroup as AG', 'AG.AgeGroupID', '=', 'CL.AgeGroupID')
    ->where('AG.MinAge', '<=', $years)
    ->where('AG.MaxAge', '>=', $years)
    ->get();