在地址和用户之间创建关系。 Return 它在 Laravel 上的视图中

Create relationships between addreses and users. Return it on the view on Laravel

我在尝试 return 用户地址视图时遇到了一些问题。 我不知道真正的问题是在我的控制器中还是在我的模型中。我想知道 return 用户与他的地址建立与模型关系的正确方法。

地址模型

<?php

      namespace App;

      use Illuminate\Database\Eloquent\Model;

      class Address extends Model {

       protected $fillable = ['name','last_name','street_address','street_address2', 'country', 'city', 'state-province', 'phone-number', 'phone-number2', 'address-type'];

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

用户模型

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'first_name', 'last_name', 'email', 'password',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

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

在 UserController 中,我使用了 getAddress 方法,但我真的不知道如何获取用户地址以及如何创建具有该关系的用户。

用户控制器

namespace App\Http\Controllers;
use App\User;
use App\Address;
use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;

class UserController extends Controller
{
public function userProfile() {
    $user = Auth::user();
    return view('user.profile', ['user' => $user]);
}

public function userAccount(User $user) {
    $user = Auth::user();
    return view('user.account', compact('user'));
}

public function nameUpdate(User $user)
{ 
    $this->validate(request(), [
        'first_name' => 'required|string|max:255',
        'last_name' => 'required|string|max:255'
    ]);

    $user->first_name = request('first_name');
    $user->last_name = request('last_name');

    $user->save();

    return redirect()->back();
}

public function emailUpdate(User $user)
{ 
    $this->validate(request(), [
        'email' => 'required|string|email|max:255|unique:users',
    ]);

    $user->email = request('email');

    $user->save();

    return redirect()->back();
}

public function passwordUpdate(User $user) {
    $this->validate(request(), [
        'password' => 'required|min:8|confirmed',
    ]);

    $user->password = bcrypt(request('password'));

    $user->save();

    return redirect()->back();
}

public function getAddress() {
    $user=Auth::user();
    $adress = $user->adress; 
    }
}

首先你必须颠倒关系,使地址属于用户。如果一个用户可以有多个地址,那么一个用户不能属于每个地址。地址必须属于用户。

在地址 table 中,您需要一个 user_id 列作为开头。

User.php

 public function addresses()
 {
     return $this->hasMany(Address::class);
 }

Address.php

 public function user()
 {
     return $this->belongsTo(User::class);
 }

然后你可以像这样简单地获取所有地址:

 foreach(Auth::user()->addresses as $address){
      //You can now access your address here
 }

您当前的控制者:

 public function getAddresses() {
     $user = Auth::user();
     $addresses = $user->addresses; 
     return $addresses;
 }

在 blade 文件中你可以做类似的事情:

     @foreach(Auth::user()->addresses as $address){
        <li>{{ $address->column_name }}</li>    
     }