代码之家  ›  专栏  ›  技术社区  ›  KiritoLyn

如何从两个模型的关系中调用数据

  •  1
  • KiritoLyn  · 技术社区  · 7 年前

    我有两个基本的表格模型:

    用户

    • 身份证件
    • IDL数
    • 电子邮件

    地址

    • 身份证件
    • 用户标识
    • 齐普码

    我当前的用户模型:

    public function addresses() {
        return $this->hasMany('App\Address');
    }
    

    我当前的地址模型:

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

    我试图在Blade视图中显示用户的邮政编码

    <div class="form-group col-md-4">
        <label for="id_number">Id Number</label>
        <input name="id_number" type="text" class="form-control" id="" value="{{ $user->id_number }}" required>
    </div>
    <div class="form-group col-md-4">
        <label for="email">E-mail</label>
        <input name="email" type="email" class="form-control" id="" value="{{ $user->email }}" required>
    </div>
    <div class="form-group col-md-4">
        <label for="zip_code">Zip Code</label>
        <input name="zip_code" type="number" class="form-control" id="" value="{{ $user->addresses()->zip_code }}">
    </div>
    

    只有ID号和电子邮件似乎能正确显示数据,我似乎无法使邮政编码显示其数据: value="{{ $user->addresses()->zip_code }}"

    我错过什么了吗?

    编辑 :

    顺便说一下,我的控制器:

    $users = User::where('deleted_at', '=', NULL)->paginate(5);
    return view('member.home')->with(compact('users'));
    

    我的一个好朋友建议这样做:

    @foreach ($users as $user)
        @foreach ($users->addresses()->get() as $address)
            {{ $address->zip_code }}
        @endforeach
    @endforeach
    

    而且效果很好。如果有人能为此提供其他方法,我们将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  1
  •   thefallen    7 年前

    首先,你的联系地址是 belongsTo :

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

    然后在循环中,不需要对地址执行查询,只需将它们作为用户的属性调用:

    @foreach ($users as $user)
        @foreach ($user->addresses as $address)
            {{ $address->zip_code }}
        @endforeach
    @endforeach
    

    这将为每个用户进行多个查询,因此您希望在控制器中像这样预先加载地址:

    $users = User::with('addresses')->get();
    
    推荐文章