I am a newbie in Laravel and I need your help.
I'm using the Laravel 7. I have 3 tables in my database.
Here are my Models
public function users(){
return $this->BelongsToMany(User::class);
}
public function categories(){
return $this->BelongsToMany(Categories::class);
}
This one below is my VendorCategories Model
protected $fillable = [
'category_id',
'vendor_id'
];
And this is the Laravel RegisterController
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'tel' => $data['tel'],
'lineid'=> isset($data['lineid']) ? $data['lineid'] : null,
]);
My Front-End code (Just Categories for a user to choose)
@if($categories->count()>0)
<div class="form-row">
<label class="form-row-inner">
<select class="selectpicker col-sm-12 md-12" id="selectpicker" name="categories[]" multiple data-live-search="true" data-selected-text-format="count" data-count-selected-text="Selected Categories({0})" title="Choose your catories" aria-expanded="false" aria-haspopup="true" required>
@foreach ($categories as $categories)
<option class="com-sm-4 md-4" aria-expanded="false" value="{{$categories->id}}"
@if (isset($user))
@if($user->hasCat($catgories->id))
selected
@endif
@endif
><strong>{{Str::limit($categories->name,51)}}</strong></option>
@endforeach
</select>
@error('category_id')
<span class="invalid-feedback-detail" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
@endif
Full Register Form Code
<form class="form-detail col-xs-12 sm-12" action="{{ route('register') }}" method="post">
@csrf
<div class="tabcontent" id="sign-up">
<div class="form-row">
<label class="form-row-inner">
<input type="text" id="full_name" class="input-text @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
<span class="label">Full Name</span>
@error('name')
<span class="invalid-feedback-detail" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
<span class="border"></span>
</label>
</div>
<div class="form-row">
<label class="form-row-inner">
<input type="text" id="your_email" class="input-text @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
<span class="label">E-Mail</span>
@error('email')
<span class="invalid-feedback-detail" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
<span class="border"></span>
</label>
</div>
<div class="form-row">
<label class="form-row-inner">
<input type="text" id="yournumber" class="input-text @error('tel') is-invalid @enderror" name="tel" required autocomplete="new-password">
<span class="label">Telephone Number</span>
@error('tel')
<span class="invalid-feedback-detail" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
<span class="border"></span>
</label>
</div>
<div class="form-row">
<label class="form-row-inner">
<input type="password" name="password" id="password" class="input-text @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
<span class="label">Password</span>
@error('password')
<span class="invalid-feedback-detail" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
<span class="border"></span>
</label>
</div>
<div class="form-row">
<label class="form-row-inner">
<input type="password" id="comfirm_password" class="input-text" name="password_confirmation" required autocomplete="new-password">
<span class="label">Confirm Password</span>
<span class="border"></span>
</label>
</div>
<div class="form-row">
<label class="form-row-inner">
<input type="text" id="comfirm_password_1" class="input-text @error('lineid') is-invalid @enderror" name="lineid" required autocomplete="new-password">
<span class="label">Line Id</span>
@error('lineid')
<span class="invalid-feedback-detail" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
<span class="border"></span>
</label>
</div>
@if($categories->count()>0)
<div class="form-row">
<label class="form-row-inner">
<select class="selectpicker col-sm-12 md-12" id="selectpicker" name="categories[]" multiple data-live-search="true" data-selected-text-format="count" data-count-selected-text="หมวดหมู่ที่เลือก ({0} หมวดหมู่)" title="เลือกหมวดหมู่ที่ให้บริการ" aria-expanded="false" aria-haspopup="true" required>
@foreach ($categories as $categories)
<option class="com-sm-4 md-4" aria-expanded="false" value="{{$categories->id}}"
@if (isset($user))
@if($user->hasCat($catgories->id))
selected
@endif
@endif
><strong>{{Str::limit($categories->name,51)}}</strong></option>
@endforeach
</select>
@error('category_id')
<span class="invalid-feedback-detail" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
@endif
<div class="form-row-last">
<input type="submit" name="register" class="register">
</div>
</div>
</form>
If I want to save the category Ids that I use @foreach to show in the Register Form after the users selected. What should I do?
This is the thing that I have tried before
protected function create(array $data){
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'tel' => $data['tel'],
'lineid'=> isset($data['lineid']) ? $data['lineid'] : null,
]);
$vendor_cat = VendorCat::create([
'category_id' => $data['category'],
'vendor_id' => $user->id
]);
return $user;
}
Here is the explanation image Click Here
Thank you,
p.s. sorry for my bad English.
Add registered
method in your RegisterController, to override the register method from your RegistersUsers
trait. Also add use Illuminate\Http\Request;
in your RegisterController.
protected function create(array $data)
{
// .... your create method in RegisterController
}
protected function registered( Request $request, $user )
{
VendorCat::create([
'category_id' => $request['category'],
'vendor_id' => $user->id
]);
}
EDIT:
as you are getting categories
as array, you can simply store all the keys separated by commas, or store them separately for each values,
foreach($request['categories'] as $category){
VendorCat::create([
'category_id' => $category,
'vendor_id' => $user->id
]);
}
It will create 3 columns for 3 different category_id with same vendor_id.
VendorCat::create([
'category_id' => is_array($request['categories']) ? implode(",",$request['categories']) : $request['categories'],
'vendor_id' => $user->id
]);