【问题标题】:Querying a belongsTo relationship查询 belongsTo 关系
【发布时间】:2017-01-31 10:19:28
【问题描述】:

我有两个表,“任务”和“课程”。有一对多的关系设置(任务属于一门课程,课程有许多任务)。我正在尝试过滤我的任务列表,但对如何根据课程表中的列进行查询感到困惑。

在课程表中,我有一个名为“college_name”的列。我有一个下拉过滤器,当我从中选择一个大学名称时,我想返回链接到课程表中具有相同“college_name”的行的所有任务。

因此,我尝试构建的查询类似于“选择属于带有 X 学院名称的课程的所有任务(学院名称取自下拉选择输入。在我的控制器中,我得到了下拉列表像这样的值:

$college = Input::get('colleges_filter');

...返回学院名称(例如“牛津学院”)。我现在需要在查询中添加使用它,但我尝试的所有操作都会出错。有人可以帮忙吗?

【问题讨论】:

  • College 似乎是多余的,我会创建一个名为Colleges 的新模型,然后使用 id 就更容易了 :)

标签: laravel laravel-5


【解决方案1】:

在 Eloquent 中,这将像这样工作:

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Task extends Model {

    public function course() {
        return $this->hasOne(\App\Models\Course::class, 'foreign_key');
    }
}

class Course extends Model {

    public function tasks() {
        return $this->hasMany(\App\Models\Task::class, 'foreign_key', 'local_key');
    }
}

你会像这样使用它:

Course::query->where('bla', 'bla')->tasks;

【讨论】:

    【解决方案2】:

    在您的课程模型中添加此关系。

    class Course extends Model {
    
        public function tasks() {
            return $this->hasMany(Task::class, 'foreign_key', 'local_key');
        }
    }
    

    根据课程选择获取任务列表将以下查询写入控制器。

    $college = Input::get('colleges_filter');
    $course = Course::where('college_name', $college)->with('tasks)->first();
    

    您可以通过

    访问课程列表
    $course->tasks
    

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 2020-03-24
      • 2020-02-02
      • 2018-03-08
      相关资源
      最近更新 更多