Отправить идентификатор пользователя и отобразить имя пользователя? - PullRequest
0 голосов
/ 15 апреля 2019

Я получил эту форму

    <div class="form-group">
        <label for="clientId">Client</label>
        <select name="client_id" class="form-control">

            @if(count($client) == 0)
            <option>There are no clients.</option>
            @else
                @foreach($client as $client)
                    <option value="{{$client->client_id}}">{{$client->client_name}}</option>
                @endforeach
            @endif

        </select>
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-success">Submit</button>
    </div>

, которая отправляет данные на этот контроллер

public function store(Request $r)
    {

        $validatedData = $r->validate([
            'proj_title' => 'required|max:100',
            'client_id' => 'required',
            'proj_desc' => 'required',
        ]);


        $currentUserId = Auth::user()->user_id;
        $currentUser = User::find('username')->name;

        $r['created_by'] = $currentUser;

        $project = Project::create($r->all());
        return redirect('/projects')->with('store','');
    }

Я установил отношения один-ко-многим от клиента к проекту.

Мое намерение состоит в том, чтобы вы передали client_id, вставили его в базу данных, а затем в индекс, который видите client_name относительно этого client_id.

Это мой индекс

<table class="table table-bordered table-hover">
    <thead>
        <tr>
            <th>Project Id</th>
            <th>Title</th>
            <th>Description</th>
            <th>Client</th>
            <th>Created by</th>
            <th>Created on</th>
            @if (Auth::user()->role=='admin')
            <th>Admin</th>

            @endif
        </tr>

    </thead>
    <tbody class="">
        @foreach ($project as $project)
        <tr>
            <td>{{$project->proj_id}}</td>
            <td>{{$project->proj_title}}</td>
            <td>{{$project->proj_desc}}</td>
            <td>{{$client->client_name}}</td>
            <td>{{$project->created_by}}</td>
            <td>{{$project->created_at}}</td>

Это мои отношения: Модель проекта:

class Project extends Model
{
    protected $primaryKey = 'proj_id';
    protected $fillable = ['proj_title','proj_desc','client_id','created_by'];

     public function user()
    {
        return $this->hasOne('App\User');
    }

    public function task()
    {
        return $this->hasMany('App\Task');
    }
public function client()
    {
        return $this->hasOne('App\Client');
    }
}

Клиент:

class Client extends Model
{
    protected $primaryKey = 'client_id';

    protected $fillable= ['client_name','client_id'];

    public function project()
    {
        return $this->hasOne('App\Project','proj_id');
    }
}

Как я понял прямо сейчас, я получаю "Свойство [client_name] не существует в этом экземпляре коллекции. (Представление: D: \ Programas \ xampp \ htdocs \ test5 \ resources \ views \ projects \ index.blade.php) "

Отношения до сих пор меня немного смущают, извините, если это очень нубский вопрос.

Заранее спасибо

1 Ответ

0 голосов
/ 15 апреля 2019

Отношение к клиенту:

public function client()
{
    return $this->belongsTo('App\Client');
}

Отношение к проекту:

public function projects()
{
    return $this->hasMany('App\Project','proj_id');
}

А чтобы получить имя клиента, просто используйте $project->client->client_name, кстати.используйте множественное число, научитесь правильно писать код ...

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