'Attempt to read property "social_media_channel_name" on string laravel

my controller

 $id= Auth::guard('artist')->user()->id;
        $profiles= Profile::where('id', $id)->get();
        $profiless= Profile::findorFail($id);
        return view('artists.profile_edit',compact('profiles','profiless'));

my model

protected $casts = [
        'social_media_channel_name' =>'array',
        'social_media_channel_link' =>'array',
    ];

my blade

                                              @foreach($profiless as $key => $profiles)

                                                    <div class="col-md-6">
                                          <input type="text" class="form-control mb-3 {{ $errors->has('social_media_channel_name') ? 'is-invalid' : '' }}" name="social_media_channel_name[]" value="{{$profiles->social_media_channel_name}}" placeholder="Social Media Channel Name">
                                       
                                       </div>
                                       @if($errors->has('social_media_channel_name'))
                                                 <div class="invalid-feedback">
                                                      {{ $errors->first('social_media_channel_name') }}
                                                  </div>
                                               @endif
   
                                               
                <div class="col-md-6">
                                          <input type="text" class="form-control mb-3 {{ $errors->has('social_media_channel_link') ? 'is-invalid' : '' }}" name="social_media_channel_link[]" value="{{$profiles->social_media_channel_link}}" placeholder="Social Media Channel Link">
                                       
                                       </div>
                                       @if($errors->has('social_media_channel_link'))
                                                 <div class="invalid-feedback">
                                                      {{ $errors->first('social_media_channel_link') }}
                                                  </div>
                                               @endif
   
                                               
                                               @endforeach

here Attempt to read property "social_media_channel_name" on string laravel show error.how to solve here Attempt to read property "social_media_channel_name" on string laravel show error.how to solve



Solution 1:[1]

There's a lot wrong with your code...

$profiles= Profile::where('id', $id)->get();

You're querying based on id, which should return a single row, but you're calling ->get() which returns a Collection... That's pointless.

$profiless= Profile::findorFail($id);

This is more correct, but that variable name is really bad.

@foreach($profiless as $key => $profiles)

You're looping over a single Model instance, which would make $key and $profiles both strings; you don't need this foreach at all. Additionally, you're overwriting the $profiles variable you're passing from the Controller via compact('profiles','profiless'));

Let's fix your code.

$id = auth()->guard('artist')->user()->id;
$profile = Profile::where('user_id', $id)->first();
// I assume `Profile` has a `user_id` column, you'd want to reference this instead of `id`

return view('artists.profile_edit', compact('profile');

profile_edit.blade.php:

<div class="col-md-6">
  <input type="text" class="form-control mb-3 {{ $errors->has('social_media_channel_name') ? 'is-invalid' : '' }}" name="social_media_channel_name[]" value="{{ $profile->social_media_channel_name }}" placeholder="Social Media Channel Name">
</div>

@if($errors->has('social_media_channel_name'))
  <div class="invalid-feedback">
    {{ $errors->first('social_media_channel_name') }}
  </div>
@endif

<div class="col-md-6">
  <input type="text" class="form-control mb-3 {{ $errors->has('social_media_channel_link') ? 'is-invalid' : '' }}" name="social_media_channel_link[]" value="{{ $profile->social_media_channel_link }}" placeholder="Social Media Channel Link">
</div>

@if($errors->has('social_media_channel_link'))
  <div class="invalid-feedback">
    {{ $errors->first('social_media_channel_link') }}
  </div>
@endif

Edit


If a User can have multiple Profiles, then you can do:

$id = auth()->guard('artist')->user()->id;
$profiles = Profile::where('user_id', $id)->get();
return view('artists.profile_edit', compact('profiles');

And include the loop in your view:

@foreach($profiles as $profile)
  // The rest of the code would be the same
@endforeach

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Tim Lewis