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