Laravel关系表用户和地址

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

我遇到了一个小问题,我尝试检索与用户的表地址关系数据。

在我的数据库地址中,我有一个与用户表ID相关联的外键user_id。

我的模特用户

public function addresses()
{
    return $this->belongsToMany('Address');
}

我的模特Adresse

public function user(){
    return $this->hasOne('User');
}

我尝试在我的UsersController中检索我尝试在我的配置文件方法中显示用户Controller Users的地址

 public function profile($id){
    if($id != Auth::user()->id){
        return Redirect::to('logout');
    }
    $user=User::find(Auth::user()->id);
    $address = $user->addresse;
    dd($address);
    $comments = Comment::where('user_id','=',Auth::user()->id)
        ->take(10)->get();

    return View::make('users.profile')
        ->with(array('comments'=>$comments,'address'=>$address));
}

但在我看来,我无法检索我的关系用户地址的数据。

profile.blade.php视图

php mysql laravel-4 eloquent relation
2个回答
1
投票

好的,你有几个错误。首先,您不需要再次定义用户,因为Auth :: user()已经是您的用户模型。所以你需要做的就是$ user = Auth :: user();

在那之后

 public function profil($id){
      ......
      $user=Auth::user();
      // this will bring users all related addresses as an array. 
      //so you can loop through and use them. 

      $adress = $user->adresses;

      ..........
 }

如果您的目标是为每个用户创建一个地址记录,那么您应该对模型进行一些更改。

在您的用户模型中,只需添加address_id列并从Address表中删除user_id列。通过这种方式,您将拥有一对一的关系。每个用户只有一个地址。

之后在您的用户模型中删除addresses()函数并添加地址(单数)函数

 public function address(){
      return $this->belongsTo("Address");
 }

并在您的地址模型中

 public function user(){
      return $this->hasOne("User");
 }

会给你你需要的东西。然后在你的控制器类

 public function profil($id){
      ......
      $user=Auth::user();
      $adress = $user->adress;
      // will give you a single address record belongs to user. 

      ..........
 }

0
投票

在您的表格地址中删除user_id,在表格用户中创建一个行名称address_id。

更改

型号用户:

public function addresses()
{
return $this>belongsToMany('address_id','Address');
}

这个:$ adress = $ user->地址:

为了这:

$address = $user->Address->address(name of the row with the address);
© www.soinside.com 2019 - 2024. All rights reserved.