错误异常:间接修改重载属性 laravel

Posted

技术标签:

【中文标题】错误异常:间接修改重载属性 laravel【英文标题】:Error Exception: Indirect modification of overloaded property laravel 【发布时间】:2018-09-20 18:56:29 【问题描述】:

我正在制作一个用于存储新版本应用程序的 API。这是我的代码:

  public function saveNewVersion() 
    $artifact_url = Input::get('url');
    $artifact_id = Input::get('id');
    $artifact_name = Input::get('name');
    $artifact_version = Input::get('version');

    $urls = explode('/', $artifact_url);

    //Exploding URL to dir
    $app_dir = "";

    for($i=5; $i<sizeof($urls); $i++)
        $app_dir .= $urls[$i] . '/';

    $app_dir .= $artifact_id;

    //Checking if the artifact_id exists in the database
    $app = Applications::where('app_dir', '=', $app_dir);

    if (!$app->count()) 
        //Save it as new application
        $new_app = new Applications();
        $new_app->application->name = $artifact_name;
        $new_app->app_dir = $app_dir;
        $new_app->save();

        $app_id = Applications::where('app_dir', '=', $app_dir)->first()->id;
     else 
        $app_id = $app->first()->id;
        //Checking if the application name is not same as newrelic (Optional)
        if ($app->first()->application_name != $artifact_name) 
            $app = $app->first();
            $app->application_name = $artifact_name;
            $app->save();
        
    

    //check if the last version exists in the database
    $version = Versions::where('application_id', '=', $app_id)->orderBy('id', 'desc');
    $lastVersion = $version->first()->version_number;

    if ($lastVersion != $artifact_version) 
        //check if the new version is exists before
        $flag = 0;
        $versions = Versions::where('application_id', '=', $app_id)->orderBy('id', 'desc')->get();
        foreach ($versions as $item) 
            if ($item->version_number == $artifact_version) 
                $flag = 1;
                break;
            
        

        if (!$flag) 
            $version = new Versions();
            $version->application_id = $app_id;
            $version->version_number = $artifact_version;
            $version->save();

            echo 'Application' . $app_id . 'has been updated to version ' . $artifact_version;
        
    

当我使用 postman 调用 API 时,API 成功运行并存储了新版本的应用程序。但是当我使用 CURL 时。我得到了ErrorException: Indirect modification of overloaded property App\Applications::$application,它指向我的$new_app-&gt;save() 代码。

我的代码有问题吗?还是邮递员中使用了一些参数使这个错误不可见?

【问题讨论】:

【参考方案1】:

我在这里可能是错的,但看起来问题就在这里:

$new_app->application->name = $artifact_name;

我认为应该是:

$new_app->application_name = $artifact_name;

基于其他代码。

【讨论】:

以上是关于错误异常:间接修改重载属性 laravel的主要内容,如果未能解决你的问题,请参考以下文章

Laravel系列7.2错误与异常处理

部署 Laravel 5.2 异常权限错误

教义,编辑 ManyToMany - 重载属性的间接修改

laravel5异常及时通知

间接修改 Illuminate\Support\Collection 的重载元素无效

Laravel Migrations 出现异常错误