Осветить - HasMany - Итерация - PullRequest
       15

Осветить - HasMany - Итерация

0 голосов
/ 08 октября 2018


Я просто делаю свои первые упражнения с 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>";
    }
}

Большое спасибо!Тим

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Почему это не работает:

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

Но это делает:

public function cources()
{
    return $this->hasMany('Course', 'Semester')->get();
}
0 голосов
/ 08 октября 2018

Прежде всего

Поскольку вы сказали, что вы новичок в '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>";
        }
    }
}
...