2015-10-02 64 views
0

我正在尝试在首次创建用户时创建引荐网址。 我的我的用户模型内部功能如下:如何在创建事件时调用模型函数? Laravel-5

private function make_url() 
{ 
    $url = str_random(40); 
    $this->referral_url->url = $url; 
    if ($this->save()){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

在模型中,我已经试过这样做,但没有奏效

USER::creating(function ($this){ 
$this->make_url(); 
}) 

我也尝试称其为内我的用户控制器创建用户操作

public function create(UserRequest $request) 
{ 
$data = $request->all() 
$data['password']= bcrypt($request->input('password')); 

if($user=User::create($data)) 
{ 
    $user->make_url(); 
} 
} 

我得到的回报这个错误

Indirect modification of overloaded property App\User::$referral_url has no effect 

在此先感谢您的帮助球员=]

P.S:如果有一个更好的方式去建立转诊网址,请告诉我。

更新

我的整个用户模型

<?php 

namespace App; 

use Illuminate\Auth\Authenticatable; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Auth\Passwords\CanResetPassword; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; 

class User extends Model implements AuthenticatableContract, CanResetPasswordContract 
{ 
    use Authenticatable, CanResetPassword; 

    protected $table = 'users'; 

    protected $fillable = [ 
          'first_name', 
          'last_name', 
          'url', 
          'email', 
          'password', 
          'answer_1', 
          'answer_2', 
          'answer_3' 
          ];       


    protected $hidden = ['password', 'remember_token']; 


    public function make_url() 
    { 
     $url = str_random(40); 
     $this->referral_url->url = $url; 
     if ($this->save()){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 

    public function user_info() 
    { 
     return $this->hasOne('App\UserInfo'); 
    } 

    public function sec_questions() 
    { 
     return $this->hasOne('App\SecurityQuestions'); 
    } 

    public function referral_url() 
    { 
     return $this->hasOne('App\ReferralUrl'); 
    } 
} 

更新 我在模型中修改的功能看现在这个样子。

public function make_url() 
{ 
    $url = str_random(40); 
    $referral_url = $this->referral_url; 
    $referral_url = new ReferralUrl(); 
    $referral_url->user_id = $this->id; 
    $referral_url->url = $url; 
    if ($referral_url->save()){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

当我打电话

$user->make_url() 

我能创建它,它显示在我的分贝,但我也得到了错误 -

Trying to get property of non-object 
+0

什么是用户模型的其余部分是什么样子? – samlev

+0

我更新了整个用户模型的帖子 – joejoeso

回答

0

通常情况下,creating方法应在0​​内调用:

public static function boot() { 
    parent::boot(); 

    static::creating(function ($model) { 
     $model->foo = 'bar'; 
    }); 
} 

然后在之前自动调用模型首次保存。

我在代码中看到的问题是,您试图修改尚不存在的关系

这样解释,该hasOne方法将尝试加入当前模型遥控模型(在你的情况下,ReferralUrl模型)的SQL,但它不能做保存您的模型,因为模型没有按之前在数据库中不存在

随着你的第二次尝试中,ReferralUrl对象是改变之一,所以那就是你需要保存一个:

public function make_url() { 
    $url = str_random(40); 
    $referral_url = $this->referral_url 
    $referral_url->url = $url; 
    if ($referral_url->save()){ 
     return true; 
    } else { 
     return false; 
    } 
} 
+0

谢谢。我更新了我的帖子。当我在我的控制器中调用该函数时,它将保存到我的数据库中,但我也遇到了错误。 – joejoeso

+0

将'$ referral_url = $ this-> referral_url;'(第2行)从您的更新函数中取出。 – samlev

+0

啊我看到了,因为我正在实例化一个新的引用obj,我并不需要它。 – joejoeso

相关问题