Php Laravel API资源返回的值不正确,条件为

Php Laravel API资源返回的值不正确,条件为,php,laravel,Php,Laravel,我不熟悉LaravelAPI,我想返回一本推荐===1的书 在我的资源中,我有这个 public function toArray($request) { return [ 'id' => $this->id, 'name' => $this->name, 'about' => $this->about, 'content' => $this->content, /

我不熟悉LaravelAPI,我想返回一本推荐===1的书

在我的资源中,我有这个

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'about' => $this->about,
        'content' => $this->content,
      //  'image' => asset('/storage/'.$this->image),
      'image' => $this->image_url,
       // 'recommended' => $this->recommended,
        'recommended' => $this->when($this->recommended === 1, $this->recommended),
        'created_at' => $this->created_at,
        'updated_at' => $this->updated_at,
        'author' => $this->author,
   ];
我想在推荐时还书===1

我的桌子是这样的

public function up()
{
    Schema::create('books', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->text('about');
        $table->string('image');  
        $table->string('image_url');
        $table->string('epub_url');
        $table->integer('author_id'); 
        $table->string('publisher');  
        $table->year('year');
        $table->boolean('recommended')->default(0);
        $table->timestamps();    
    });
我能在网上用这个实现同样的事情

public function index()
{
    $data = array();
    $data['recommends'] = Book::where('recommended', 1)->take(10)->get();
    $data['latests'] = Book::orderBy('created_at', 'desc')->take(10)->get();
   return view('welcome', compact("data"));
}
public function index()
{
    $data = array();
    $data['recommends'] = Book::where('recommended', 1)->take(10)->get();
    $data['latests'] = Book::orderBy('created_at', 'desc')->take(10)->get();
   return view('welcome', compact("data"));
}
但我不知道如何使用LaravelAPI复制相同的内容

更新 我能在网上用这个实现同样的事情

public function index()
{
    $data = array();
    $data['recommends'] = Book::where('recommended', 1)->take(10)->get();
    $data['latests'] = Book::orderBy('created_at', 'desc')->take(10)->get();
   return view('welcome', compact("data"));
}
public function index()
{
    $data = array();
    $data['recommends'] = Book::where('recommended', 1)->take(10)->get();
    $data['latests'] = Book::orderBy('created_at', 'desc')->take(10)->get();
   return view('welcome', compact("data"));
}
但我不知道如何使用LaravelAPI复制相同的内容

通常我会使用API资源获取所有类似的书籍或帖子

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'about' => $this->about,
        'content' => $this->content,
        'image' => $this->image_url,
        'recommended' => $this->recommended,
        'created_at' => $this->created_at,
        'updated_at' => $this->updated_at,
        'author' => $this->author,
   ];
在我的控制器里这样叫它

public function indexapi()
{
  return BookResource::collection(Book::with('author')->Paginate(16));
}
但在某些情况下,
推荐的
为==1,而在某些情况下,
推荐的
==0,在这种情况下,我只想在推荐的==1时返回数据

我知道我的问题很令人困惑

谢谢


谢谢。

如果我没有弄错,您只想筛选并获取具有(推荐属性==1)的书籍。如果是这样的话,你就不应该在你的收藏文件中这样做。在将任何数据传递到集合之前,应该在控制器中执行此过滤过程

下面是我的一个项目中的一些代码示例

在ProductController.php文件中

public function index()
{
    return new ProductCollection( Product::where('recommended','1')->get() );
}
public function toArray($request)
{
    return [
        'data' => $this->collection->map( function($data) {
            return [
                'id' => (integer) $data->id,
                'name' => $data->name,
                'category_id' => $data->category_id,
                'brand_id' => $data->brand_id,
                'photos' => json_decode($data->photos),
                'gtin' => $data->gtin
            ];
        })
    ];
}
如您所见,我正在筛选产品,以仅获得推荐的产品。然后我将这些过滤后的数据发送到ProductCollection。这样,集合将只返回我想要的数据

在ProductCollection.php文件中

public function index()
{
    return new ProductCollection( Product::where('recommended','1')->get() );
}
public function toArray($request)
{
    return [
        'data' => $this->collection->map( function($data) {
            return [
                'id' => (integer) $data->id,
                'name' => $data->name,
                'category_id' => $data->category_id,
                'brand_id' => $data->brand_id,
                'photos' => json_decode($data->photos),
                'gtin' => $data->gtin
            ];
        })
    ];
}

我不必在收藏中做任何更改。因为这样,收集应该为它获得的每一个数据执行任务。

返回哪本书?这个资源首先是用来做什么的示例:我想返回一篇推荐文章的文章。默认情况下,我将Recommendable设置为0,这使得它不被推荐,但当它被推荐时,它必须==1。这就是我在这里努力实现的目标。谢谢。
when
方法用于有条件地添加属性,而不是返回整个资源,在返回资源之前感觉应该这样做。。。除了你的问题,你是如何使用这个API资源的。你能不能用代码的形式解释一下,我会更好地理解,这样我就能自己解决类似的问题了。谢谢。谢谢你的提示,我已经解决了。