Создать отношения между адресатами и пользователями.Верните его на вид на Laravel - PullRequest
0 голосов
/ 22 мая 2018

У меня проблемы с попыткой вернуть представление с адресом пользователя.Я не знаю, настоящая проблема в моем контроллере или в моих моделях.Я хотел бы знать, как правильно вернуть пользователя с его адресом, создавая связь с моделями.

Модель адреса

<?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, но я действительно не знаю, как получить адрес пользователя и как создать пользователя с этим отношением.

UserController

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; 
    }
}

1 Ответ

0 голосов
/ 23 мая 2018

Прежде всего вы должны изменить отношения так, чтобы адрес принадлежал пользователю.Если у пользователя может быть несколько адресов, он не может принадлежать каждому из этих адресов.Адреса должны принадлежать пользователю.

В таблице адресов вам понадобится столбец 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;
 }

В блейд-файле вы можете сделать что-то вроде:

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