【问题标题】:Illuminate - HasMany - Iteration照亮 - HasMany - 迭代
【发布时间】:2018-10-07 21:04:52
【问题描述】:


我只是在我目前手工制作的数据库和网站上使用 Illuminate (Laravel) 进行第一次练习。我想通过使用 MVC 进行改进,发现 Illuminate 用于与我的数据库交互很有趣。

我在这个该死的小代码上工作了一天,但找不到问题,我希望那里有人对我有一个好主意。非常感谢!

基本问题:为什么我不能将课程迭代到给定学期?虽然可以调用特定的课程。

use Illuminate\Database\Eloquent\Model as Eloquent;

class Semester extends Eloquent {
    protected $table      = "tblSemester";
    protected $primaryKey = "SemesterID";

    public function getCourses() {
        // test if semester is correct
        echo $this->SemesterID, " - ", $this->Semestertext, "<br>"; 

        // This works fine and returns the expected result
        $course = $this->hasMany('Course', 'Semester')->first();
        echo $course->Number, " - ", $course->Title;

        // This doesn't work. It returns nothing. 
        // There seems to be no data in $courses (just metadata)
        $courses = $this->hasMany('Course', 'Semester');
        foreach ($courses as $course) {
            echo $course->Number, " - ", $course->Title;
            echo "<br>";
        }

        return "<h1>" . "Test ends" . "</h1>";
    }
}

非常感谢! 蒂姆

【问题讨论】:

  • 你必须执行关系查询:$courses = $this-&gt;hasMany('Course', 'Semester')-&gt;get();

标签: php laravel iteration has-many illuminate-container


【解决方案1】:

首先

既然你说你是 'Laravel' 的新手并且想跟随 MVC,我想我可以给你一些建议。

  1. 在 laravel 模型中,不要包含数据库操作代码。而是将它们写入控制器。
  2. 在模型中,仅包含属于单个模型实例的函数(非静态函数)。
    1. 关系
    2. 查询范围
    3. 访问器/修饰符

示例模型

class Semester extends Model 
{
    protected $table = 'semesters';

    // relationships
    public function cources()
    {
        return $this->hasMany(Cource::class);
    }
}

示例控制器

class SemesterController extends Controller
{
    public function iterateOverCourcesOfGivenSemester()
    {
        // take first semester as an example.
        $givenSemester = Semester::first();

        // all the cources belongs to a given semester.
        $cources = $givenSemester->cources;

        foreach($cources as $cource) {

            // Warning! don't echo anything in a controller, Instead return them to a view.
            echo $course->Number, " - ", $course->Title;
            echo "<br>";
        }
    }
}

【讨论】:

    【解决方案2】:

    为什么这不起作用:

    public function cources()
    {
        return $this->hasMany(Cource::class);
    }   
    

    但这确实:

    public function cources()
    {
        return $this->hasMany('Course', 'Semester')->get();
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-25
      • 2015-10-28
      • 1970-01-01
      • 2016-06-05
      • 2015-02-05
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多