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

时间:2019-03-08 00:24:05

标签: laravel view controller

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

控制器:

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

查看:

$data->profile->age

2 个答案:

答案 0 :(得分:1)

我认为在您的$ data模型中有一个名为profile的函数。由此,它获得了等效的配置文件。

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

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

在视图中,您可能会写类似

$phone->user->name

现在,在后台,laravel将转到电话并从user_id获取该电话的值。 (如果外键位于不同的列中,您也可以指定它)。然后,laravel将找到带有该user_id的users表并检索该行。然后在视图上显示名称。

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

答案 1 :(得分:1)

是的。它将使用您在个人档案模型中定义的关系找到关联的个人档案

  

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

这是documentation中的一个简单示例,可帮助您理解:

假设您有一个posts表和一个comments表:

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

  

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

注意:在这种情况下,如果您使用的是comments表,则您的posts表中必须有一个引用post_id表的外键,例如with _id。您应该在您的关系中告知其他名称:

  

请记住,Eloquent将自动确定评论模型上的正确外键列。按照惯例,Eloquent将采用拥有模型的“ snake case”名称,并在其后缀post_id。因此,对于这个示例,Eloquent将假定Comment模型上的外键是<?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'); } }

在您的发布模型中,您可以执行以下操作:

<?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

现在,如果您想访问帖子中的所有评论,则只需获取关系即可:

@foreach($post->comments as $comment)
{
 {{$comment->text}} 
}
@endforeach

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

您认为您可以执行以下操作:

s = "the           quick      brown        fox"
' '.join(s.split()) == "the quick brown fox" # returns True

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