#php #laravel #eloquent #laravel-7 #eloquent-relationship
#php #laravel #красноречивый #laravel-7 #красноречивый-отношения
Вопрос:
У меня есть 4 таблицы: Users, CompanyRegister, VoucherDetails, Addvoucher. Таким образом, идентификатор пользователя для аутентификации будет отправлен как user_id в таблице companyRegister, а затем идентификатор companyRegister будет отправлен как company_id в таблице Voucherdetails, и, наконец, идентификатор voucherDetails будет отправлен в таблице addVoucher как voucher_ID. Я новичок в использовании eloquent, а также laravel, я не могу понять, почему я не могу получить идентификатор из voucherdetails и отправить в addvoucher, но я могу получить идентификатор из companyregister и отправить в company_id в voucherdetails. Я использую тот же метод для получения идентификатора, но не работаю, я надеюсь, что смогу получить решение и объяснение здесь, заранее благодарю вас!!
Моя модель пользователей
public function companyregisters()
{
return $this->hasOne('Appcompanyregisters');
}
public function voucherdetails()
{
return $this->hasMany('Appvoucherdetails');
}
public function addvoucher()
{
return $this->hasMany('Appaddvoucher');
}
public function roles()
{
return $this->belongsToMany('Approle');
}
public function hasAnyRoles($roles)
{
if($this->roles()->whereIn('name', $roles)->first()){
return true;
}
return false;
}
public function hasRole($role)
{
if($this->roles()->where('name', $role)->first()){
return true;
}
return false;
}
моя модель регистрации компании
public function User(){
return $this->belongsTo('AppUser');
}
public function voucherdetails()
{
return $this->hasMany('Appvoucherdetails');
}
моя модель voucherdetails
public function User(){
return $this->belongsTo('User');
}
public function companyregisters(){
return $this->belongsTo('Appcompanyregisters');
}
public function addvoucher()
{
return $this->hasOne('Appaddvoucher');
}
моя модель addvoucher
public function User(){
return $this->belongsTo('AppUser');
}
public function voucherdetails(){
return $this->belongsTo('Appvoucherdetails');
}
мой voucherdetailsController
public function store(Request $request){
$voucherdetail = new voucherdetails();
$voucherdetail->title = $request->input('title');
$voucherdetail->description = $request->input('description');
$voucherdetail->user_id = Auth::user()->id;
$id = Auth::user()->id;
$user = User::find($id);
$company = $user->companyregisters;
$companyId = $company->id;
$voucherdetail->company_id = $companyId;
$voucherdetail->save();
return redirect()->to('addvoucher');
}
мой addvoucherController
public function store(Request $request){
$addvoucher = new addvoucher();
$addvoucher->voucherTitle = $request->input('voucherTitle');
$addvoucher->voucherCode = $request->input('voucherCode');
$addvoucher->user_id = Auth::user()->id;
//Here(the voucherdetails id cant get to submit in voucher_id)
$id = Auth::user()->id;
$user = User::find($id);
$voucher = $user->voucherdetails;
$voucherID = $voucher->id;
$addvoucher->voucher_id = $voucherID;
$addvoucher->save();
return redirect()->to('displayVouchers');
}
Комментарии:
1. какая часть конкретно не работает, не могли бы вы добавить комментарий типа «// эта строка здесь, я не получаю правильное значение» или подобное?
2. Я отредактировал Sir
3. Я вижу, добавляя ответ сейчас
4. хорошо, сэр, я также получил эту ошибку, сэр, при использовании этого метода «Свойство [id] не существует в этом экземпляре коллекции».
5. Действительно, смотрите Ответ ниже, почему это происходит 🙂
Ответ №1:
Этот код работает, потому что companyregisters — это отношение hasOne, для которого в документах указано:
Как только связь определена, мы можем получить связанную запись, используя динамические свойства Eloquent.
public function companyregisters()
{
return $this->hasOne('Appcompanyregisters');
}
$company = $user->companyregisters; // ie this returns the single related record
$companyId = $company->id; // and it has an `id` property, all good here
Однако этот код завершается с ошибкой, потому voucherdetails
что это отношение hasMany, для которого в документах указано:
Как только связь определена, мы можем получить доступ к «коллекции» комментариев, обратившись к свойству comments .
Дополнительная информация о коллекциях
public function voucherdetails()
{
return $this->hasMany('Appvoucherdetails');
}
$voucher = $user->voucherdetails; // ie this returns a "collection" of related records
$voucherID = $voucher->id; // this "collection" does NOT have an id property, but each record IN the collection does.
В итоге, либо ваша связь определена неправильно (hasMany vs. hasOne), либо вам нужно будет перебирать связанные записи, чтобы получить идентификатор из каждой.
Комментарии:
1. сэр, но моя модель voucherdetails была hasOne, а не hasMany
2. Приведенное выше скопировано из вашего опубликованного кода. Возможно, вы хотели , чтобы это было
hasOne
, но вы сделали этоhasMany
, если это так, исправьте это, и все будет хорошо 🙂3. Большое вам спасибо за ваше объяснение, сэр, это решило мою проблему, 🙂
4. Это была моя ошибка, вместо hasOne я поставил hasMany это y 🙁
5. @balamurugana Потрясающе, рад помочь.