【问题标题】:Function forget() return Call to undefined method in Laravel函数忘记()返回调用Laravel中未定义的方法
【发布时间】:2019-04-08 06:49:58
【问题描述】:

当我尝试使用 forget() 方法从集合中删除项目时出现错误:

调用未定义的方法 Illuminate\Database\Eloquent\Relations\HasManyThrough::forget()

我的模特City.php

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class City extends Model
{
    public function rooms(){
      return $this->hasManyThrough('App\Room','App\Object');
    }
}

我的方法包含forget()

public function getSearchResults($request){
    $request->flash();
    if($request->input('city')!=null){
      $result = $this->fR->getSearchResults($request->input('city'));
      if($result){

        foreach($result->rooms as $k=>$room)
        {
          if($request->input('room_size') > 0)
          {
            if($request->input('room_size') != $room->room_size)
            {
              $result->rooms()->forget($k);
            }
          }
        }

        return $result;
      }
    }
    return false;
  }

我能做些什么来解决它? 感谢您的帮助

【问题讨论】:

  • Forget 通常指缓存。你的意思是像detatch 这样的东西吗?
  • 我想排除与搜索结果不匹配的元素...忘记这种情况不好?
  • $result-&gt;rooms() 看起来像一个关系查询。它不会忘记的。也许$result-&gt;rooms-&gt;forget($k) 可能会起作用,因为那将是结果集合。
  • 我认为你是对的。谢谢

标签: php laravel


【解决方案1】:

您应该在清除缓存后更改您的代码。

public function getSearchResults($request){
    $request->flash();
    if($request->input('city')!=null){
      $result = $this->fR->getSearchResults($request->input('city'));
      if($result){

        foreach($result->rooms as $k=>$room)
        {
          if($request->input('room_size') > 0)
          {
            if($request->input('room_size') != $room->room_size)
            {
              $result->rooms->forget($k);
            }
          }
        }

        return $result;
      }
    }
    return false;
  }

然后在命令下面运行

php artisan cache:clear
Artisan::call('cache:clear');

【讨论】:

    猜你喜欢
    • 2021-04-05
    • 2021-02-16
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2023-03-16
    • 2015-07-02
    • 1970-01-01
    相关资源
    最近更新 更多