Laravel 拉维资源:获取一些关系

Laravel 拉维资源:获取一些关系,laravel,Laravel,有一个型号用户和一个型号付款。我需要创建一个资源,以便返回用户成功付款,该付款由状态字段标识。这是我的解决方案: class User extends BaseModel { use HasFactory, SearchableTrait, SortableTrait; protected $fillable = ['name', 'mobile', 'email', 'username', 'hash_id']; public $searchable = ['name

有一个型号
用户
和一个型号
付款
。我需要创建一个资源,以便返回用户成功付款,该付款由
状态
字段标识。这是我的解决方案:

class User extends BaseModel
{
    use HasFactory, SearchableTrait, SortableTrait;

    protected $fillable = ['name', 'mobile', 'email', 'username', 'hash_id'];
    public $searchable = ['name', 'mobile', 'email', 'id', 'user:referred'];
    public $sortable = ['name', 'mobile', 'email', 'id'];

    protected $table = 'users';


    public function invoices()
    {
        return $this->hasMany(Invoice::class,'user_id');
    }
}
和在控制器中

public function index()
{
    $users = new User();
    $users = $users::with(['invoices'])->filtered()->sorted();
    return UserResource::collection($users->paginate());
}


这似乎是一个混乱的解决方案。我正在寻找一些东西来使用资源中模型关系中的作用域。我该怎么做呢?

在控制器中,您可以执行以下操作:

use Illuminate\Database\Eloquent\Builder;

public function index()
{
    $users = User::with(['invoices'])->whereHas('invoices', function(Builder $query) {
      $query->where('status', 2999);
    });
    return UserResource::collection($users->paginate());
}


在控制器中,您可以执行以下操作:

use Illuminate\Database\Eloquent\Builder;

public function index()
{
    $users = User::with(['invoices'])->whereHas('invoices', function(Builder $query) {
      $query->where('status', 2999);
    });
    return UserResource::collection($users->paginate());
}


$users=新用户()您正在此处创建新用户,新用户是否有发票?(顺便说一句,我将它命名为
$user
而不是
$users
,因为它实际上只有一个用户)@kerbh0lz它返回paginate
$users=newuser()中的所有用户您正在此处创建新用户,新用户是否有发票?(顺便说一句,我将它命名为
$user
而不是
$users
,因为它实际上只有一个用户)@kerbh0lz它返回paginate中的所有用户
use Illuminate\Database\Eloquent\Builder;

public function index()
{
    $users = User::with(['invoices'])->whereHas('invoices', function(Builder $query) {
      $query->where('status', 2999);
    });
    return UserResource::collection($users->paginate());
}

<?php
class User extends BaseModel
{
    use HasFactory, SearchableTrait, SortableTrait;

    protected $fillable = ['name', 'mobile', 'email', 'username', 'hash_id'];
    public $searchable = ['name', 'mobile', 'email', 'id', 'user:referred'];
    public $sortable = ['name', 'mobile', 'email', 'id'];

    protected $appends = ['success_payments']; // append this value in all queries    

    protected $table = 'users';


    public function invoices()
    {
        return $this->hasMany(Invoice::class,'user_id');
    }

    //the function for it
    public function getSuccessPaymentsAttribute(){
        return App\Payment::where('user_id', $this->id)->where('status', 'success')->get(); //replace the attribute name or condition as per your db structure
    }
}