laravel 模型关系 5.5
Posted
技术标签:
【中文标题】laravel 模型关系 5.5【英文标题】:laravel model relationship 5.5 【发布时间】:2018-07-11 07:59:44 【问题描述】:1.用户 1. 身份证 2.名字
2。类别 1. 身份证 2. 类别名称 3.user_id
3。帖子 1. 身份证 2. post_title 3. category_id
所以现在我想在我的视图中显示数据 比如:post_title->category_name->user_name
模型中的laravel查询关系怎么做
【问题讨论】:
【参考方案1】:定义关系
class Post extends Model
return $this->blongsTo(Category::class);
class Category extends Model
return $this->blongsTo(User::class);
现在
$post = with('category.user')->whereId(1)->first(); //1 is my guess
$post->category()->user->name();
虽然您可以像这样访问用户的帖子,但它似乎也是has-many-through 关系
$user->posts;
为此,您需要定义:
class User extends Model
/**
* Get all of the posts for the user.
*/
public function posts()
return $this->hasManyThrough(Post:class, Category::class);
【讨论】:
@Md Majadul Islam 检查答案 很好的查询@Mahdi Younesi 但我想显示我的结果$post = Post::with(............)->get->(); So now result is post_title, category_name, user_name ?
@Md Majadul Islam 我编辑了问题,使用 eager loading
$post->category->name ` 或 $post->category->user->name
randomId 是 laravel 的默认函数?
或者你可以通过 slug 或标题找到$post = with('category.user')->whereSlug('some-slug')->first();
【参考方案2】:
$Query=DB::select('select posts.post_title,categories.category_name,
users.name from posts,categories,users where users.id=categories.user_id and
categories.id=posts.category_id');
如果你不使用 DB:: 你可以使用你的模型
$Query = Users::select('users.name', 'posts.post_title', 'categories.category_name')
->join('categories', function ($join)
$join->on('categories.user_id', '=', 'users.id')
->join('categories.id', '=', 'posts.category_id');
)
->get();
检查拼写表名和列 但是如果数据中有重复,它将无法正常工作
【讨论】:
谢谢@Ahmed Shams,但我不使用DB
为什么只使用 Illuminate\Support\Facades\DB;
其实我不想使用 DB 因为我会使用模态关系所以我不会使用以上是关于laravel 模型关系 5.5的主要内容,如果未能解决你的问题,请参考以下文章