存储具有 user_id 和 article_id - laravel 的 offers()

Store offers() which have user_id and article_id - laravel

我创建了一个包含用户、文章和优惠的简单应用程序。现在用户可以创建文章并提供该文章。 SO User hasMany Article and hasMany Offers, article belogsTo User and hasMany Offers and offers belongsTo User and Article...所以我写:

在用户模型:

 public function articles(){
        return $this->hasMany('App\Article');
    }

    public function offer(){
        return $this->hasMany('App\Offer');
    }

文章型号:

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

    public function offer(){

        return $this->hasMany('App\Offer');
    }

我在 Offer 模型中写道:

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

    public function article(){
        return $this->belongsTo('App\Article');
    }

但现在我想知道如何在我的 OffersController 中创建 store() 函数 - 我尝试:

public function store(Requests\OfferRequest $request)
    {
        $offer = new Offer($request->all());

        Auth::user()->articles()->offer()->save($offer);

        Alert::success('Offer is succesfully added!','Good job!')->persistent("Close");

        return redirect('offers');
    }

但我得到错误:

BadMethodCallException in Builder.php line 2071: Call to undefined method Illuminate\Database\Query\Builder::article()

我的表单代码也是:

{!! Form::open(['url'=>'offers']) !!}
        <div class="form-group">
            {!! Form::label('price','Price') !!}
            {!! Form::text('price', null, ['class'=>'form-control']) !!}
        </div>
        <div class="form-group">
            {!! Form::submit('Add Offer',  ['class'=>'btn btn-primary form-control']) !!}
        </div>
        {!! Form::close() !!}

我的路线是:

Route::resource('offers', 'OffersController');

如何添加报价并且该报价需要有 user_id 的 Auth::user 和 article_id ...

当我使用:Auth::user()->offer()->save($offer); 然后商店报价很好,但只有 user_id 我不知道如何才能 article_id 商店报价。

我也知道我可以将 {{$article->id}} 放在 blade 模板中并从表单中获取它们,但这是安全高风险...

还有一件事 - 只有用户(管理员)可以创建文章,但所有用户都可以为文章提供报价,所以因为我需要 user_id 在报价 table...

请帮忙!

我认为问题在于您没有选择要约附加到的文章。 尝试选择文章或直接将其保存在用户中。

在您的控制器中,您可以执行类似的操作以将报价保存到特定文章...

Auth::user()->articles()->find($articleID)->offer()->save($offer);

或者像这样保存给用户...

Auth::user()->offer()->save($offer);

不确定您是如何在文章和用户之间共享优惠的,但如果您这样做的话,那很好。

希望对您有所帮助...

快速的小建议:将报价方法复数化,因为它是一个 hasMany 关系。