Laravel在与$ data相关联的另一个表中查找记录

问题描述 投票:0回答:2

我正在查看一些laravel代码,我对代码有几个问题。在视图中,我看到一段代码“$ data-> profile-> age”。此代码是否自动在与$ data关联的配置文件表中查找配置文件记录?它如何找到相关的配置文件?

控制器:

return view('new-design.pages.influencer.info')
                ->withData($data)

视图:

$data->profile->age
laravel view controller
2个回答
1
投票

是。它使用您在Profile模型中定义的关系查找关联的配置文件

一旦定义了关系,我们就可以使用Eloquent的动态属性检索相关记录。动态属性允许您访问关系方法,就好像它们是在模型上定义的属性一样:

以下是来自documentation的简单示例,可帮助您理解:

假设你有一张posts表和一张comments表:

我们需要定义这两个表之间的关系。

一对多关系用于定义单个模型拥有任何数量的其他模型的关系。例如,博客文章可能有无数的评论。

注意:你的qazxsw poi表中必须有一个引用qazxsw poi表的外键,如qazxsw poi,在这种情况下,如果你使用不同的名字,你应该在你的关系中告知:

请记住,Eloquent将自动确定Comment模型上的正确外键列。按照惯例,Eloquent将采用拥有模型的“蛇案”名称,并将其后缀为comments。因此,对于此示例,Eloquent将假设Comment模型上的外键是posts

在你的Post模型中你可以做到:

post_id

在您的评论模型中,您应该定义反向关系

with _id

现在,如果您想要访问帖子中的所有评论,您只需要获得关系:

post_id

因此,您基本上可以访问它们,就好像它们是模型中的属性一样,如文档中所述

在您的视图中,您可以执行以下操作:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    /**
     * Get the comments for the blog post.
     */
    public function comments()
    {
        return $this->hasMany('App\Comment');
    }
}


此示例将打印我们在控制器中获得的帖子中的每个评论文本。


1
投票

我在你的模型中估计$ data有一个叫做profile的函数。从中获得了相同的配置文件。

示例:假设您有一个名为phone的模型,并且您想要找到拥有它的用户。您可以在模型中编写以下函数。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    /**
     * Get the post that owns the comment.
     */
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

在视图中你可能会写一些类似的东西

$post = Post::find($id); // find a post
$post->comments; // This will return all comments that belong to the given post

现在,在场景后面,laravel将转到手机并从@foreach($post->comments as $comment) { {{$comment->text}} } @endforeach 获取该手机的价值。 (如果外键位于不同的列中,您也可以指定它)。然后laravel将找到带有 public function user() { return $this->belongsTo('App\User'); } 的users表并检索该行。然后在视图上显示名称。

现在,如果存在复杂查询,您还可以在模型中为其编写函数。

© www.soinside.com 2019 - 2024. All rights reserved.