Laravel 4-雄辩的一对多横幅点击

Laravel 4-雄辩的一对多横幅点击,laravel,eloquent,Laravel,Eloquent,我看不出我的代码哪里出错了。我相信我已经正确设置了关系/模型,但我的bannerclicks表不会插入行,更糟糕的是,它似乎破坏了横幅重定向 迁移 const TBL_BANNER_CLICKS = 'banner_clicks'; public function up() { // Create the clicks table Schema::create(self::TBL_BANNER_CLICKS, function($table){

我看不出我的代码哪里出错了。我相信我已经正确设置了关系/模型,但我的bannerclicks表不会插入行,更糟糕的是,它似乎破坏了横幅重定向

迁移

const TBL_BANNER_CLICKS = 'banner_clicks';

public function up()
    {
    // Create the clicks table
        Schema::create(self::TBL_BANNER_CLICKS, function($table){
            $table->engine = 'InnoDB';
            $table->increments('id');
            $table->integer('banner_id')->unsigned();
            $table->string('ip_address', 45);
            $table->integer('clicks')->unsigned()->default(0);
            $table->integer('created_at');

            $table->foreign('banner_id')
                ->references('id')->on('banners')
                ->onUpdate('cascade')
                ->onDelete('cascade')
            ;
        });
    }
模型

Banner.php

public function bannerclicks()
    {
     return $this->hasMany('BannerClick');
    } 
BannerClick.php

protected $table = 'banner_clicks';

 public function banner()
{
return $this->belongsTo('Banner');
}
BannerController.php

public function redirect($id)
    {
        try {
            // Original (want to keep)
            $banner = Banner::where('id', $id)
                ->where('active', 1)
                ->firstOrFail();
            $banner->clicks++;
            $banner->save();

                    // new banner_clicks table
            $bannerclick = new BannerClick($id);
            $bannerclick->banner_id = $id;
                    $bannerclick->clicks = 1;
            $bannerclick->bannerclicks()->save($bannerclick);


            return Redirect::to($banner->url);
        } catch (Exception $ex) {
            return Redirect::to('/');
        }
    }
HTML


我认为你应该用这样的方式来挽救你的关系:

public function redirect($id)
{
    try {
        // Original (want to keep)
        $banner = Banner::where('id', $id)
            ->where('active', 1)
            ->firstOrFail();
        $banner->clicks++;
        $banner->save();

                // new banner_clicks table
        $bannerclick = new BannerClick(array('clicks' => 1));
        $banner->bannerclicks()->save($bannerclick);


        return Redirect::to($banner->url);
    } catch (Exception $ex) {
        return Redirect::to('/');
    }
}
请看这里:

或者干脆这样做:

        $banner = Banner::where('id', $id)
            ->where('active', 1)
            ->firstOrFail();
        $banner->clicks++;
        $banner->save();

                // new banner_clicks table
        $bannerclick = new BannerClick;
        $bannerclick->clicks = 1;
        $bannerclick->banner_id= $banner->id;
        $bannerclick->save();

这就像我一直在尝试,整天都在做各种各样的事情。我尝试了你的代码,但和我的代码一样,它保持失败并重定向到/尝试打印$ex->getMessage而不是重定向,这应该有助于查看错误是什么。或者同时将代码放在一个try-catch块之外。它不会吐出任何东西,只是停留在应该调用控制器的URL上。这是my routes.php Route::get'external/{id}中的项,数组'uses'=>'BannerController@redirect';我想那是你的测试领域,所以我看不到它。它实际上只是弹出一个默认的错误页面。我在一个“继承”的网站上工作。
        $banner = Banner::where('id', $id)
            ->where('active', 1)
            ->firstOrFail();
        $banner->clicks++;
        $banner->save();

                // new banner_clicks table
        $bannerclick = new BannerClick;
        $bannerclick->clicks = 1;
        $bannerclick->banner_id= $banner->id;
        $bannerclick->save();