laravel - 调用未定义的方法 App\\Repositories\\WishlistRepository::firstOrFail()
问题描述
我想在我的网站中提供愿望清单功能,因此我编写了下面列出的代码。现在,当我检查产品是否已在愿望清单表中列出时,如果它被列入愿望清单,则将其删除。因此,为此我写了在 WishlistRepository 的 isAlreadyListed 函数中列出的内容:
return $this->firstOrFail()->where('product_id', $p_id)->where('user_id',$u_id);
然后我收到以下错误:
调用未定义的方法 App\Repositories\WishlistRepository::firstOrFail()
愿望清单存储库
<?php
namespace App\Repositories;
use App\Models\Wishlist;
use App\Traits\UploadAble;
use Illuminate\Http\UploadedFile;
use App\Contracts\WishlistContract;
use Illuminate\Database\QueryException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Doctrine\Instantiator\Exception\InvalidArgumentException;
/**
* Class WishlistRepository
*
* @package \App\Repositories
*/
class WishlistRepository extends BaseRepository implements WishlistContract
{
use UploadAble;
public function __construct(Wishlist $model)
{
parent::__construct($model);
$this->model = $model;
}
public function listWishlist(string $order = 'id', string $sort = 'desc', array $columns = ['*'])
{
return $this->all($columns, $order, $sort);
}
public function addToWishlist(array $params)
{
try {
if($this->isAlreadyWishlisted($params['product_id'], $params['user_id']))
{
$this->removefromWishlist($params);
}
else
{
$wishlist = new Wishlist($params);
$wishlist->save();
return $wishlist;
}
} catch (QueryException $exception) {
throw new InvalidArgumentException($exception->getMessage());
}
}
public function removefromWishlist($params)
{
$wishlist = $this->isAlreadyWishlisted($params['product_id'],$params['user_id']);
$wishlist->delete();
return $wishlist;
}
public function isAlreadyWishlisted(int $p_id,int $u_id)
{
try {
return $this->firstOrFail()->where('product_id', $p_id)->where('user_id',$u_id);
} catch (ModelNotFoundException $e) {
throw new ModelNotFoundException($e);
}
}
}
?>
型号(愿望清单):
<?php
namespace App\Models;
use Illuminate\Support\Str;
use Illuminate\Database\Eloquent\Model;
class wishlist extends Model
{
/**
* @var string
*/
protected $table = "wishlists";
/**
* @var array
*/
protected $fillable = [
'product_id', 'user_id'
];
public function user(){
return $this->belongsTo(User::class);
}
public function product(){
return $this->belongsTo(Product::class);
}
}
解决方案
您正在调用firstOrFail()
存储库类,而是应该在您指定的模型上调用它。
return $this->model->firstOrFail()->where('product_id', $p_id)->where('user_id',$u_id);
推荐阅读
- python - 需要根据两行的差异往df中插入行
- git - 将 Gerrit 中的当前补丁集重新定位到另一个分支
- azure-functions - 带有 HTTP 触发器的 Azure 函数返回 204 但不执行函数
- sql - 如何比较两个结构相同的数据框以计算行差异
- html - 浏览器响应式设计模式和桌面缩放
- ruby-on-rails - 在 Rails (OAuth) 中来自 Twitter 的额外字段
- google-cloud-platform - Stackdriver 停止从 GKE 容器记录日志
- webbrowser-control - webbrowser 控件显示另存为对话框,而不是显示本地 .mhtml 页面
- javascript - 在 safari 中如何将 SVG 子元素滚动到视图中?
- python-3.x - Intelij IDEA 导入类出现问题,“找不到参考”,但代码仍然有效 - Python