Осветить - HasMany - Итерация
Я просто делаю свои первые упражнения с 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 ответа
Решение
Прежде всего
Поскольку вы сказали, что вы новичок в 'Laravel' и хотите следовать MVC, я подумал, что могу дать вам несколько советов.
- В моделях Laravel не включайте коды манипулирования базой данных. Вместо этого напишите их в контроллерах.
- В моделях включайте только те функции, которые принадлежат одному экземпляру модели (нестатические функции).
- отношения
- области запросов
- аксессоры / модификаторы
Пример модели
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>";
}
}
}
Почему это не работает:
public function cources()
{
return $this->hasMany(Cource::class);
}
Но это делает:
public function cources()
{
return $this->hasMany('Course', 'Semester')->get();
}