首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非静态方法App\User::addresses()不应静态调用

非静态方法App\User::addresses()不应静态调用
EN

Stack Overflow用户
提问于 2020-03-08 08:23:49
回答 1查看 2.3K关注 0票数 0

我试图获取登录的用户的所有地址,我已经在模型地址和用户中创建了一个关系。任何登录的客户/用户都可以保存多个地址,并使该部分起作用的一个地址为主地址,但在保存之后,我希望获得该特定客户的所有地址,因此我创建了关系。我试着把所有的地址

代码语言:javascript
复制
$userAddress=User::addresses();

但我得到了

非静态方法App\User:: addresses ()不应被称为静态地址

这是我的用户模型:

代码语言:javascript
复制
<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Hash;

class User extends Authenticatable
{
    use Notifiable;

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

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

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    /**
    * @return string
    */
    public function getFullNameAttribute()
    {
    return $this->first_name. ' '. $this->last_name;
    }

    public function setPasswordAttribute($pass){

        $this->attributes['password'] = Hash::make($pass);

    }

    public function wishlist(){
        return $this->hasMany(Wishlist::class);
    }

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

地址模型:

代码语言:javascript
复制
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Addresses extends Model
{
     /**
     * @var string
     */
    protected $table = 'addresses';

     /**
     * @var array
     */
    protected $fillable = [
        'name', 'address', 'country', 'state', 'city','address_type','user_id','updated_at'
    ];

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

产品控制器:

代码语言:javascript
复制
<?php

namespace App\Http\Controllers\Site;
use App\Contracts\AttributeContract;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Contracts\ProductContract;
use App\Contracts\AddressContract;
use Cart;
use Validator;
use App\User;

class ProductController extends Controller
{ 
    protected $productRepository;
    protected $attributeRepository;
    protected $addressRepository;
    public function __construct(ProductContract $productRepository, AttributeContract $attributeRepository, AddressContract $addressRepository)
{  
    $this->productRepository = $productRepository;
    $this->attributeRepository = $attributeRepository;
    $this->addressRepository = $addressRepository;
}

    public function index()
    {
        $products = $this->productRepository->listFeaturedProduct();
        return view('site.pages.homepage', compact('products'));
    }

public function checkout(Request $request)
{
    $userAddress=User::addresses();
    return view('site.pages.checkout');
}

public function addUserAddress(Request $request)
{
    $customer_name=$request->customer_name;
    $customer_address=$request->customer_address; 
    $country=$request->country; 
    $city=$request->city;
    $zip_code=$request->zip_code;  
    $state=$request->state; 
    $address_type=$request->address_type; 
    $is_primary_address=$request->primary_address; 
    $userID=auth()->user()->id;
    $data=array('name'=>$customer_name,'address'=>$customer_address,'country'=>$country,'state'=>$state,'city'=>$city,'address_type'=>$address_type,'user_id'=>$userID,'is_primary_address'=>$is_primary_address);
    $userAddress  = $this->addressRepository->addAddress($data);
    return redirect()->back()->with('message', 'Address Added');
}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-08 08:45:00

用户名称空间为App\User,地址命名空间为App\Models\Addresses

你需要编辑你的两个模型。

用户模型

代码语言:javascript
复制
<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Hash;

use App\Models\Addresses; // You are missing this line !!!!

class User extends Authenticatable
{
    use Notifiable;

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

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

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    /**
    * @return string
    */
    public function getFullNameAttribute()
    {
    return $this->first_name. ' '. $this->last_name;
    }

    public function setPasswordAttribute($pass){

        $this->attributes['password'] = Hash::make($pass);

    }

    public function wishlist(){
        return $this->hasMany(Wishlist::class);
    }

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

地址模型

代码语言:javascript
复制
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use App\User; // and this line here

class Addresses extends Model
{
     /**
     * @var string
     */
    protected $table = 'addresses';

     /**
     * @var array
     */
    protected $fillable = [
        'name', 'address', 'country', 'state', 'city','address_type','user_id','updated_at'
    ];

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

现在您可以使用这个关系来获取一个用户的附件

代码语言:javascript
复制
$id = 1;
$adresses = User::find($id)->addresses;
\\ or
$adresses = auth()->user()->addresses;

我还有两点意见:

一个模型不应该像你对Addresses

  • You做的那样复数有一个错误,在英语中只有一个D与法语不同。

  • 你应该注意到,我们没有直接使用这个方法,我们使用它作为一个属性(->addresses而不是->addresses()),如果您使用该方法,您将使用查询生成器。

代码语言:javascript
复制
$user->addresses()->get();
\\or
$user->addresses()->latest()->first();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60585717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档