在地址和用户之间创建关系。 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>
}
我在尝试 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>
}