Как присоединиться к трём столам по модели laravel eloquent

255
35

У меня есть три таблицы


Таблица статей


 id
title
body
categories_id
user_id

Таблица категорий


  id
category_name

Таблица пользователей


 id
user_name
user_type

Я хочу показывать статьи с их именем категории вместо category_id и user_name вместо user_id
Я стараюсь как этот запрос. Это работа!


$articles =DB::table('articles')
->join('categories', 'articles.id', '=', 'categories.id')
->join('users', 'users.id', '=', 'articles.user_id')
->select('articles.id','articles.title','articles.body','users.username', 'category.name')
->get();

Но я хочу сделать по-честному. Пожалуйста, как я мог это сделать?

спросил(а) 2021-01-25T17:06:47+03:00 4 месяца, 2 недели назад
1
Решение
318

С Eloquent очень легко получить реляционную проверку данных в следующем примере с вашим senario в Laravel 5


мы имеем три модели


1) Статья (принадлежит пользователю и категории)


2) Категория (есть много статей)


3) Пользователь (имеет много статей)


1) Article.php


<?php

namespace App\Models;
use Eloquent;

class Article extends Eloquent{

protected $table = 'articles';

public function user()
{
return $this->belongsTo('App\Models\User');
}

public function category()
{
return $this->belongsTo('App\Models\Category');
}

}


2) Category.php


<?php

namespace App\Models;

use Eloquent;

class Category extends Eloquent
{
protected $table = "categories";

public function articles()
{
return $this->hasMany('App\Models\Article');
}

}


3) User.php

<?php

namespace App\Models;
use Eloquent;

class User extends Eloquent
{
protected $table = 'users';

public function articles()
{
return $this->hasMany('App\Models\Article');
}

}


Вам необходимо понять, отношение вашей базы данных и настройки в моделях. У пользователя много статей. В категории есть много статей. Статьи принадлежат пользователю и категории. После того, как вы настроите отношения в laravel, вам будет легко получить связанную информацию.


Например, если вы хотите получить статью с помощью пользователя и категории, вам нужно будет написать:


$article = \App\Models\Article::with(['user','category'])->first();

и вы можете использовать это как


//retrieve user name 
$article->user->user_name

//retrieve category name
$article->category->category_name


в другом случае вам может потребоваться получить все статьи в категории или получить все конкретные статьи для пользователей; вы можете написать это следующим образом:


$categories = \App\Models\Category::with('articles')->get();

$users = \App\Models\Category::with('users')->get();


вы можете узнать больше на http://laravel.com/docs/5.0/eloquent

ответил(а) 2021-01-25T17:06:47+03:00 4 месяца, 2 недели назад
147

Попробуйте:

$articles = DB::table('articles')
->select('articles.id as articles_id', ..... )
->join('categories', 'articles.categories_id', '=', 'categories.id')
->join('users', 'articles.user_id', '=', 'user.id')

->get();

ответил(а) 2021-01-25T17:06:47+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема