Невозможно отобразить данные пользователя из базы данных - говорит "Свойство [id] не существует" - PullRequest
2 голосов
/ 08 ноября 2019

Я пытался обойти эту ошибку уже почти 2 дня. Само собой разумеется, я все еще довольно новичок в Laravel. Я использую регистрационную форму Laravel (с некоторыми изменениями) и храню эти данные пользователя в таблице под названием "customusers" в моей базе данных. Эти данные включают их имя / адрес электронной почты / пол / описание и т. Д. И я пытаюсь использовать контроллер ресурсов для печати и редактирования этих данных. Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я пытаюсь отобразить данные на моей главной странице, выдается ошибка «Свойство [идентификатор] не существует в этом экземпляре коллекции» или адрес электронной почты / имя. Но когда я отображаю данные с помощью Auth :: user () -> id, это работает. И это нормально, это выполнимо, если бы я только хотел отобразить данные. Но я также хочу редактировать эти данные, и мне придется использовать мою модель для этого. Вот мой код:

Display.blade.php:

<div id="wrapper">

<div id="content">
  <div id="card">
    <div id="front">
      <div id="top-pic"></div>
    <div id="avatar"><span style="position: absolute;padding-top: 17px;margin-left: 34px;color:  #fff;font-size:  64px;" class="h5">
        {{ Auth::user()->name[0] }}
    </span></div>
      <div id="info-box">
        <div class="info">
          <h1>{{ Auth::user()->name }}</h1>
          <h2>{{ Auth::user()->message }}</h2>
        </div>
      </div>
      <div id="social-bar">
        <a href="{{ Auth::user()->facebook }}" target="_blank">
          <i class="fa fa-facebook"></i>
        </a>
        <a href="{{ Auth::user()->twitter }}" target="_blank">
        <i class="fa fa-twitter"></i>
        </a>
        {{ link_to_route('display.edit','',[$customusers->id],['class'=>'fa fa-edit']) }}

      </div>
    </div>

Edit.blade.php:

{!! Form::model($customusers,array('route'=>['display.store',$customusers->id],'method'=>'PUT')) !!}
            <div class="form-group">
                    {!! Form::text('name',null,['class'=>'form-control','placeholder'=>'Name']) !!}
             </div>
            <div class="form-group">
                    {!! Form::email('email',null,['class'=>'form-control','placeholder'=>'Email']) !!}
            </div>
                <div class="form-group form-row">
                        <div class="col-5">
                                {!! Form::select('gender', ['Male' => 'Male', 'Female' => 'Female'], null, ['class'=>'form-control','placeholder'=>'Choose Gender']); !!}
                        </div>
                        <div class="col">
                                {!! Form::text('facebook',null,['class'=>'form-control','placeholder'=>'Facebook ID']) !!}
                        </div>
                        <div class="col">
                                {!! Form::text('twitter',null,['class'=>'form-control','placeholder'=>'Twitter Handle']) !!}
                        </div>
                </div>
                <div class="form-group">
                        {!! Form::textarea('message',null,['class'=>'form-control','placeholder'=>'Talk about yourself']) !!}
                </div>
                <div class="form-group">
                        {!! Form::button('Create',['type'=>'submit','class'=>'btn btn-danger col-lg-12']) !!}
                </div>
                {!! Form::close() !!}

ProfileController.php :

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\CustomUser;
use Illuminate\Support\Facades\DB;


class ProfileController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $customusers = CustomUser::all();
        return view ('display',compact('customusers'));
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
   //
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    //
}

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    //
}

/**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function edit(CustomUser $customusers) 
{
    return view ('edit',compact('customusers'));
}

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, CustomUser $customusers)
{
    $customusers->update($request->all());
    return redirect()->route('display.index');
}


/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function destroy($id)
{
    //
}
}

CustomUser.php (модель):

   <?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class CustomUser extends Authenticatable
{
    use Notifiable;

    protected $table = 'customusers';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name','username','email','gender','password','message','twitter','facebook',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

Web. php (Routes):

    Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::resource('/display','ProfileController');

Итак, как вы можете видеть, я использую функцию compact in index () для подачи всех пользовательских данных в мою базу данных, и когда я dd ($customusers) - он показывает мне данные в массиве. Но когда я использую {{$ customusers-> name}} - это выдает ошибку, говорящую «Свойство [имя] не существует в этом экземпляре коллекции». И поэтому, то же самое происходит, когда я пытаюсь использовать link_to_route('display.edit','',[$customusers->id],'') для перенаправления пользователя на страницу редактирования. Пожалуйста, помогите мне увидеть, что я делаю не так здесь. Ранее я сделал приложение CRUD, и я в основном делал то же самое, и все это прекрасно работало. Так что я не понимаю, в чем здесь проблема ..

Ответы [ 4 ]

2 голосов
/ 08 ноября 2019

Вам нужно зациклить данные клиентов:

@foreach($customusers as $customer)
 {{ link_to_route('display.edit','',[$customer->id],['class'=>'fa fa-edit']) }}
@endforeach

Или вы можете редактировать текущие данные в системе.

{{ link_to_route('display.edit','',[Auth::user()->id],['class'=>'fa fa-edit']) }}
0 голосов
/ 08 ноября 2019

Как я вижу ваш файл лезвия дисплея. Вы хотите отредактировать того пользователя, который является Authenticate. Auth

Таким образом, вам нужно использовать метод FindOrFail() в файле вашего контроллера:

 <?php

 namespace App\Http\Controllers;
 use Illuminate\Http\Request;
 use App\CustomUser;
 use Illuminate\Support\Facades\DB;
 use Auth;

 class ProfileController extends Controller
 {

     public function index()
     {
          $id = Auth::user()->id;
          $customusers = CustomUser::FindOrFail($id);
          return view ('display',compact('customusers'));
     }
 }

И использовать display.blade. PHP-файл, например:

{{ link_to_route('display.edit','',[$customuser->id],['class'=>'fa fa-edit']) }}

Если вы хотите вернуть все данные, используйте следующий код:

@foreach($customusers as $customuser)
     @if($customuser->id == Auth::user()->id);
          {{ link_to_route('display.edit','',[$customuser->id],['class'=>'fa fa-edit']) }}
     @endif
@endforeach

Контроллер как есть:

public function index()
{
    $customusers = CustomUser::all();
    return view ('display',compact('customusers'));
}
0 голосов
/ 08 ноября 2019

По сути, вы передаете всех пользователей (сбор данных) на компакт.

Вы должны использовать цикл foreach для доступа к этим данным.

попробуйте просмотреть в цикле

@foreach($customusers as $customuser)
{{ link_to_route('display.edit','',[$customuser->id],['class'=>'fa fa-edit']) }}
@endforeach

это будет работать

0 голосов
/ 08 ноября 2019

$customusers->all() возвращает коллекцию (массив моделей)

$customers = [ {}, {}, {}, {} ]

Поэтому, когда вы пытаетесь получить свойство name или любое другое, оно undefined

Вам необходимо выполнить цикл броска в представлении:

@foreach($customusers as $customer)

// Here you have access to all Properties of each $customer

@endforeach 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...