Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel雄辩::第一个或创造问题_Php_Laravel_Eloquent - Fatal编程技术网

Php Laravel雄辩::第一个或创造问题

Php Laravel雄辩::第一个或创造问题,php,laravel,eloquent,Php,Laravel,Eloquent,好的,我试着在另一个雄辩的模型中使用雄辩的方法“firstOrCreate” 口若悬河 class FriendRequest extends Eloquent { /** * The database table used by the model. * * @var string */ public $table = 'requests'; protected $guarded = array('id'); protected $softDelete = true; public

好的,我试着在另一个雄辩的模型中使用雄辩的方法“firstOrCreate”

口若悬河

class FriendRequest extends Eloquent {

/**
 * The database table used by the model.
 *
 * @var string
 */
public $table = 'requests';
protected $guarded = array('id');
protected $softDelete = true;

public function friend() {
    return $this->hasOne('User', 'id', 'friend_id');
}

public function user() {
    return $this->hasOne('User', 'id', 'user_id');
}

public function accept() {

    // FIRST YOU MUST MARK REQUEST AS ACCEPTED
    // THEN SOFT DELETE REQUEST SO IT DOESN'T
    // SHOW UP AS ACTIVE FRIEND REQUEST
    $this->accepted = '1';
    $this->save();

    // CREATE FRIENDSHIP USER -> REQUESTED
    $friend             =   Friend::firstOrNew(array('user_id' => Auth::user()->id, 'friend_id' => $this->friend_id));
    $friend->save();

    // CREATE FRIENDSHIP REQUESTED -> USER
    $friend2             =   Friend::firstOrNew(array('user_id' => $this->friend_id, 'friend_id' => Auth::user()->id));
    $friend2->save();

    // SOFT DELETE REQUEST BEING MARKED ACCEPTED
    $status = $this->delete();

    if (!$status):
        return false;
    else:
        return true;
    endif;

}

}
我尝试了firstOrCreate和firstOrNew,如图所示,但数组中给定的“friend_id”和“user_id”都设置为“0”

行或索引没有默认值

这是朋友口才模型

class Friend extends Eloquent {

/**
 * The database table used by the model.
 *
 * @var string
 */
public $table = 'friends';
protected $guarded = array('id');

public function user() {
    return $this->hasOne('User', 'id', 'user_id');
}

public function friend() {
    return $this->hasOne('User', 'id', 'friend_id');
}

}

我认为您应该将
accept()
函数放在一个控制器中,而不是放在模型中。我不确定您如何调用此函数以及在何处调用此函数,但我认为它位于错误的位置。

create()方法进行大规模赋值,这是一个很大的安全问题,因此Laravel对它有保护。在内部,它具有guarded=['*'],因此您的所有列都将受到保护,不受批量分配的影响。您有一些选择:

设置模型的可填充列:

class User extends Eloquent {

    protected $fillable = array('first_name', 'last_name', 'email');

}
或者只设置要保护的对象:

class User extends Eloquent {

  protected $guarded = array('password');
}

您也可以自行承担风险:

class User extends Eloquent {

    protected $guarded = array();

}
关于firstorcreate和firstornew的区别:

firstOrNew方法(如firstOrCreate)将尝试在数据库中查找与给定属性匹配的记录。但是,如果找不到模型,将返回一个新的模型实例。请注意,firstOrNew返回的模型尚未持久化到数据库中。您需要手动调用save以保持它:

您也可以穿过正面并使用以下内容:

 class Settings extends Eloquent
 {
    protected $table = 'settings';
    protected $primaryKey = 'name';

     public static function get($settingName)
     {
         return Settings::firstOrCreate(array('name' => $settingName));
      }
}