#php #laravel #eloquent #eloquent-relationship
#php #laravel #красноречивый #красноречивое отношение
Вопрос:
У меня есть форма, в которой я отправляю идентификатор из «проекта»;
<div class="form-group">
<label for="Project">Project</label>
<select name="proj_id" class="form-control">
@if (count($project) == 0)
<option>There are no projects.</option>
@else
@foreach($project as $project)
<option value="{{$project->proj_id}}">{{$project->proj_title}}</option>
@endforeach
@endif
</select>
</div>
Эта часть работает правильно, она вставляет proj_id в базу данных, но когда я возвращаюсь к своему индексу, я хочу отобразить имя проекта из этого идентификатора.
Это мой индекс;
<tbody class="">
@foreach ($task as $task)
<tr>
<td>{{$task->task_id}}</td>
-------> <td>{{$projects->find($task->proj_id)->proj_title}}</td>
<td>{{$task->task_title}}</td>
<td>{{$task->task_desc}}</td>
<td>{{$task->status}}</td>
<td>{{$task->priority}}</td>
<td>{{$task->created_by}}</td>
<td>{{$task->created_at}}</td>
@if (Auth::user()->role=='admin')
<td>
Как бы то ни было, это выдает ошибку в названии.
Если я изменю эту строку, $task->proj_id
она отобразит это без проблем.
Также это моя индексная функция в TaskController:
public function index()
{
return view('tasks.index', [
'task' => Task::all(),
'projects' => Project::all(),
]);
}
И это мои отношения:
Модель проекта;
class Project extends Model
{
protected $primaryKey = 'proj_id';
protected $fillable = ['proj_title','proj_desc','client_id','created_by'];
public function client (){
return $this->belongsTo('AppClient');
}
public function tasks (){
return $this->hasMany('AppTask');
}
}
Модель задачи;
class Task extends Model
{
protected $primaryKey = 'task_id';
protected $fillable = ['task_title','task_desc','status','priority','person_id','proj_title','proj_id','created_by'];
public function project(){
return $this->belongsTo('AppProject','proj_id');
}
}
Заранее спасибо
Комментарии:
1. Вы
$projects
определили где-нибудь на своей индексной странице? Вы имели в видуProject::find($task->proj_id)->proj_title
?
Ответ №1:
сделайте это
<td>{{$task->project->proj_title}}</td>
и это должно работать нормально, поскольку задача и проект имеют belongsTo
взаимосвязь, вы должны иметь возможность получить модель проекта, связанную с $task
использованием $task->project
.
Комментарии:
1. Это сработало для меня после того, как я выполнил новую миграцию, спасибо. Кстати, у меня тот же сценарий с «created_by», который является идентификатором пользователя, мне нужно отобразить имя пользователя с этим идентификатором. Отношение то же самое, но с этим ^^^^ кодом это дает мне попытку получить свойство ‘name’ не-объекта
2. @Jesus проверьте, что вы получаете
$task->project
в этом случае.3. Я получаю «Пытаюсь получить свойство ‘name’ не-объекта» для
$task->user->name
. Если я оставлю$task->name
поле просто пустым, но оно не выдает ошибку4. @Иисус, есть ли какая-либо связь с моделью задачи для модели пользователя?
5. Я только что понял это. Это было то, что я должен был указать свой внешний ключ. Большое вам спасибо, ваш ответ был действительно полезен!