当前位置: 首页 > 知识库问答 >
问题:

laravel/ardent-on save(),错误:Relationship方法必须返回Illuminate类型的对象

齐高阳
2023-03-14

我在处理我的关系上遇到了一些麻烦。在我的应用中,用户和想法之间存在一对多的关系。(一个用户可能有多种想法。)我用的是热情。

下面是我的用户模型:


use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;

use LaravelBook\Ardent\Ardent;

class User extends Ardent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('password', 'remember_token');
    protected $fillable = array('first_name', 'last_name', 'email', 'password');

    public $validation_errors;
    public $autoPurgeRedundantAttributes = true;
    public $autoHashPasswordAttributes = true;
    public $autoHydrateEntityFromInput = true;

    public static $passwordAttributes  = array('password');

    public static $rules = array(
        'first_name'            => 'required|between:1,16',
        'last_name'             => 'required|between:1,16',
        'email'                 => 'required|email|unique:users',
        'password'              => 'required|between:6,100'
    );

    public function ideas()
    {
        return $this->hasMany('Idea');
    }   
}

这是我的创意模型:


use LaravelBook\Ardent\Ardent;

class Idea extends Ardent {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'ideas';

    protected $fillable = array('title');

    public $validation_errors;
    public $autoPurgeRedundantAttributes = true;
    public $autoHydrateEntityFromInput = true;

    public static $rules = array(
        'title'            => 'required'
    );

    public function user()
    {
        return $this->belongsTo('User');
    }
}

最后,下面是我的控制器代码:

class IdeasController extends BaseController {

    public function postInsert()
    {
        $idea = new Idea;

        $idea->user()->associate(Auth::user());

        if($idea->save())
        {
            return Response::json(array(
                'success' => true,
                'idea_id' => $idea->id,
                'title' => $idea->title),
                200
            );
        }
        else
        {
            return Response::json(array(
                'success' => false,
                'errors' => json_encode($idea->errors)),
                400
            );
        }
    }

}

$idea->save()抛出错误:

{
  "error": {
    "type": "LogicException",
    "message": "Relationship method must return an object of type Illuminate\\Database\\Eloquent\\Relations\\Relation",
    "file": "\/var\/www\/3os\/vendor\/laravel\/framework\/src\/Illuminate\/Database\/Eloquent\/Model.php",
    "line": 2498
  }
}

一开始,我试图在Idea中设置user_id,如下所示:

$idea->user_id = Auth::id();

然后我将其改为:

$idea->user()->associate(Auth::user());

但结果是一样的。

如有任何建议,将不胜感激。

共有2个答案

郭元明
2023-03-14

associate将处理belognsto关系,在您的原因中,您必须使用的是附加相关模型。请参阅文档中有关附加相关模式的更多信息。

章子航
2023-03-14

不能在该方向使用associate,因为它只能用于belongsto关系。在您的案例中,一个想法属于一个用户,而不是相反。

我怀疑在保存时发生了错误,因为您创建了一个没有所需标题的想法,然后试图通过调用$idea->errors来获取错误,而它应该是$idea->errors()

 类似资料:
  • 我有3个DB表,我没有在其中任何一个表上添加任何关系。然后我编写了以下代码: 它应该创建一个新用户,然后查看谁邀请了他,然后与邀请者创建一个共享记录。 但是当我测试它时,我得到了一个错误: 逻辑异常 关系方法必须返回类型为照明\数据库\雄辩\关系\关系的对象 打开:/home/oneinfin/public\u html/diasis/vendor/laravel/framework/src/il

  • 我正在尝试返回属于文件路由中相同案例的多个会话。php: 控制器:: SessionController.php: 模型类:: LawSession.php: 模型类:: LawCase.php: 我得到了这个错误: 关系方法必须返回类型为照明\数据库\雄辩\关系\关系的对象

  • 为了方便起见,我将setter方法返回类型更改为对象,例如: 但在tomcat做出这一改变之后 PropertyNotFoundException: 为了消除这个异常,我将修饰符从private更改为public,但仍然得到相同的错误。所以我有两个问题; null

  • 问题内容: 它返回此错误:此方法必须返回boolean类型的结果。我究竟做错了什么? 问题答案: 现在,不能保证该函数返回a ,因为很可能不会输入任何一条语句。 您可以像这样修复它(但 只有 在您的逻辑确实需要它的情况下 才 这样做):

  • 我试图从WebView中javascript调用的方法调用WebView方法。然后Webview应该返回方法中使用的值。 html事件- 显然,Webview在ui线程中运行,而js不运行,webview的方法必须从同一个线程调用。此方法可用于从非ui线程调用方法: 但我也想返回结果<代码>返回webView。例如,getUrl()。我该怎么做?

  • 我正在使用JUnit 5,并从“软件测试”书中复制了代码,以便创建一个模拟对象进行测试。部分测试器代码是: 我有一个编译器错误,它说“方法isLeap(int)必须覆盖或实现一个超类型方法”。此错误在我覆盖isLeap()方法的行中报告。(@over下面的行) 好吧,令人惊讶的是,这就是我所做的。所以我不知道这是什么抱怨。下面是simpleDate类中的isLeap()方法: 正如您所看到的,测试

  • 在典型的 Rust 函数中,返回的值若是有个错误的类型,将导致出现如下所示的错误: error[E0308]: mismatched types --> src/main.rs:2:12 | 1 | fn foo() { | - expected `()` because of default return type 2 | return "foo" |

  • 我创建这个类是为了更好地使用它 然后我想创建一个简单的函数来剪辑一个矩形,就像这样 但是当我将rect传递到我的函数中时,我在标题中得到了错误。我甚至还打印了字体 我想知道Rect样式的对象和Rect对象之间是否有区别,因为我太困惑了。此外,在屏幕上绘制矩形是布局tic-tac-toe GUI的最佳方式,还是绘制线条更简单。