Я использую Laravel 5.2
.Массовое назначение Laravel 5.2 в модели не работает с именем динамической таблицы
У меня есть модель User
, в котором я хочу установить имя table
динамически и вставить записи в нее с помощью mass assignment
(то есть create()
метода). Мой код выглядит,
Пользователь:
class User extends Authenticatable
{
use SoftDeletes;
use Notifiable;
protected $table = 'users';
public function __construct() {
parent::__construct();
if(\Session::has("organization_id")){
$org_id = \Session::get("organization_id");
$t= $org_id.'_users';
$this->setTable($t);
}
}
protected $fillable = ['auth0_user_id','username', 'email', 'password',
'user_type','first_name','middle_name',
'last_name','gender','address',
'state','city','country',
'post_code','phone','photo',
'birth_date','status','doctor_title',
'created_by','updated_by','isGuest',
'email_varify','confirmation_code', 'membership_code'
];
protected $hidden = ['password', 'remember_token'];
protected $appends = ['full_name','name_with_title'];
protected $dates = ['deleted_at'];
}
UserController:
public function register(Request $request){
$input = $request->all();
$input['user_type']='patient';
$input['password'] = \Hash::make($request->password);
$input['isGuest']= '1';
$input['status']= 'Incomplete';
$input['username'] = str_random(10);
$input['confirmation_code']= str_random(30);
$user = User::create($input);
}
Проблема, не вставляя никаких значений в соответствующих столбцах, которые Я дал в $input
переменная.
Я проверил, если имя таблицы изменилось или не используя
$user->getTable();
и, кажется, в порядке. Я получаю точное имя таблицы.
Если я использую
dd ($user);
Тогда это приводит к следующим образом:
App\Models\User Object
(
[table:protected] => 1_users
[fillable:protected] => Array
(
[0] => auth0_user_id
[1] => username
[2] => email
[3] => password
[4] => user_type
[5] => first_name
[6] => middle_name
[7] => last_name
[8] => gender
[9] => address
[10] => state
[11] => city
[12] => country
[13] => post_code
[14] => phone
[15] => photo
[16] => birth_date
[17] => status
[18] => doctor_title
[19] => created_by
[20] => updated_by
[21] => isGuest
[22] => email_varify
[23] => confirmation_code
[24] => membership_code
)
[hidden:protected] => Array
(
[0] => password
[1] => remember_token
)
[appends:protected] => Array
(
[0] => full_name
[1] => name_with_title
)
[dates:protected] => Array
(
[0] => deleted_at
)
[connection:protected] =>
[primaryKey:protected] => id
[keyType:protected] => int
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[updated_at] => 2016-10-27 05:53:17
[created_at] => 2016-10-27 05:53:17
[id] => 20
)
[original:protected] => Array
(
[updated_at] => 2016-10-27 05:53:17
[created_at] => 2016-10-27 05:53:17
[id] => 20
)
[relations:protected] => Array
(
)
[visible:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
[dateFormat:protected] =>
[casts:protected] => Array
(
)
[touches:protected] => Array
(
)
[observables:protected] => Array
(
)
[with:protected] => Array
(
)
[exists] => 1
[wasRecentlyCreated] => 1
[forceDeleting:protected] =>
)
Здесь вы можете найти имя таблицы успешно изменилось, но я не найти каких-либо столбцов в [attributes:protected]
или в [original:protected]
,
Кроме того, я попытался как:
$user = new User();
$user->create($input);
Но ничто не кажется, работает.
Если я использую,
$user = new User();
$user->email = $input['email'];
$user->save()
Тогда, кажется, работает нормально, но для этого я должен обновить свои коды во многих местах.
Любое решение для массового назначения?
Спасибо за ответ. Позвольте мне проверить и сообщить вам. – Dev
Это сработало. Большое спасибо. – Dev
Рад, что я мог помочь, но я не очень хорошо объяснил это. См. Мой обновленный ответ. –