В моей системе есть три таблицы.
Студент может написать много статей, и статья принадлежит только одному студенту. И статья может иметь только одну категорию.
контроллер
public function all_articles_by_student_by_category(Request $request){$students_id = $request->students_id;
$categories_id = $request->categories_id;$article_list = Students::find($students_id)->articles->all();
//This return Something like, Select All Articles Written by Damith
}
модель
class Students extends Model
{
protected $fillable = ['id','first_name', 'last_name', 'age', 'created_at', 'updated_at'];
public function articles()
{
return $this->hasMany('App\Articles');
}
}
Что я пытаюсь получить
Что-то вроде «Выбрать все статьи, написанные Дамитом для категории технологий» (там должно быть название категории)
Что я могу сделать до сих пор
Что-то вроде, выберите все статьи, написанные Дамитом, используя $article_list = Students::find($students_id)->articles->all();
(Вы можете найти этот код из контроллера)
Что я хочу от тебя
Как мне изменить $article_list = Students::find($students_id)->articles->all();
чтобы получить, что-то вроде, выберите все статьи, написанные Дамитом для категории технологии. (Имя категории должно быть там в результате, и оно находится в таблице категорий, и для условия, где вы можете использовать category_id, который я в таблице статьи )
Сначала с что ты сделал до сих пор ->all()
Метод не требуется при получении записей для отношения на модели, он будет возвращать все статьи, связанные с этим студентом:
Students::find($students_id)->articles
Пройдите Статьи Модель
Вы могли бы сделать что-то вроде:
Article::where('student_id', $students_id)
->where('category_id', $category_id)->get();
Который достиг бы результата, которого вы добиваетесь.
Пройти через модель студентов
Если вы хотите пройти Students
Model
Вы можете ограничить отношения, используя with
метод.
$student = Students::with(['articles' => function($query) use ($category_id) {
$query->where('category_id', $category_id);
}])->find($student_id);
$filteredArticles = $student->articles
Полезные ссылки
Eager Loading
: https://laravel.com/docs/5.5/eloquent-relationships#eager-loadingПри доступе к отношениям Eloquent в качестве свойств данные отношений «загружаются лениво». Это означает, что данные отношений фактически не загружаются, пока вы не получите первый доступ к свойству. Однако Eloquent может «загружать» отношения во время запроса родительской модели.
Constraining Eager Loads
: https://laravel.com/docs/5.5/eloquent-relationships#constraining-eager-loadsИногда вы можете захотеть загрузить отношения, но также указать дополнительные ограничения запроса для запроса загрузки.
Примерно так должно работать:
$technologyArticles = Articles::where('student_id', '=', $students_id)->where('category_id', '=', $categories_id)->get();