Я новичок в Laravel и плохо разбираюсь в синтаксисе. Я хочу видеть значения другой таблицы через внешний ключ (идентификатор этой таблицы).
https://ibb.co/pXRFRHn На этом рисунке вы можете видеть, что я получаю идентификаторы пользователя и класса. Я хочу, чтобы названия были связаны с этими идентификаторами.
У меня есть таблицы разделов, пользователей и класса. Я использую class_id и user_id в качестве внешнего ключа в таблице разделов. Когда я пытаюсь показать данные, я вижу идентификатор, но я хочу, чтобы имя и другие поля были извлечены из этого идентификатора.
Контроллер
public function index()
{
$sections = Section::all();
$classs = Classs::all();
$users = User::all();
return view('sections.index')->with('sections', $sections)->with('classs', $classs)->with('users', $users);
}
Лезвие/Вид
<div class = "box">
<div class = "box-header">
<h3 class = "box-title">All Sections</h3>
</div>
<div class = "box-body">
<table class = "table table-responsive">
<thead>
<tr>
<th>Name</th>
<th>Class</th>
<th>User</th>
<th>Modify</th>
</tr>
</thead>
<tbody>
@foreach($sections as $cat)
<tr>
<td>{{$cat->title}}</td>
<td>{{$cat->class_id}}</td>
<td>{{$cat->user_id}}</td>
<td>
<button class = "btn btn-info" data-mytitle = "{{$cat->title}}"
data-myclassid = "{{$cat->class_id}}" data-myuserid = "{{$cat->user_id}}"
data-catid = {{$cat->id}} data-toggle = "modal" data-target = "#edit">Edit
</button>
<button class = "btn btn-danger" data-catid = {{$cat->id}} data-toggle = "modal"
data-target = "#delete">Delete
</button>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
Конкретно...
<td>{{$cat->class_id}}</td>
Отсюда я получаю идентификатор класса, но мне также нужно его имя.
{{$cat->(class_id)->name}}"
Однако это не сработало. Я редактировал модели
class Classs extends Model
{
//
protected $fillable = [
'id',
'title',
];
public function section()
{
return $this->belongsTo('App\Section');
}}
Модель сечения
class Section extends Model
{
//
protected $fillable = [
'id',
'title',
'class_id',
'user_id',
];
public function classs()
{
return $this->hasMany('App\Classs');
}}
И, конечно, забудьте IE или Edge;)
что ты спрашиваешь, пожалуйста, объясни.
это тоже мой вопрос, вы можете проверить, я не получил на него должных ответов.
@AbdulRehman, если вам не понравились ответы, которые вы получили на другой вопрос, вы не должны были их принимать.
Вместо
{{$cat->(class_id)->name}}
пытаться
{{$cat->classs->name}}
Вы обращаетесь к внешнему ключу в таблице разделов с помощью $cat->(class_id)
, что работает. Но теперь вы хотите запросить отношение через его динамические свойства, для чего требуется $cat->classs->"any properties of classs"
.
Я только что изменил его, и он дает эту ошибку. Я не знаю, о какой колонке идет речь. SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «classses.section_id» в «предложении where» (SQL: выберите * из classses
, где classses
.section_id
= 2 и classses
.section_id
не равно нулю) (Просмотр: C:\xampp \htdocs\jurs1\resources\views\sections\index.blade.php)
Извините, я недостаточно внимательно проверил. Я считаю, что ваша модель данных неверна. Внешний ключ должен быть определен в модели/таблице "belongsTo". Итак, если отношения в таблицах базы данных правильные, то просто поменяйте местами «belongsTo» и «hasMany» в своих моделях. А потом посмотрите мой предыдущий ответ.
«Пытаюсь получить «титул» свойства не-объекта
Замените «возвратное представление ('sections.index')-> с ...» на «возвратное представление ('sections.index', compact ('разделы', 'классы', 'пользователи'));'
попробуйте $section->classs
, это должен быть массив, потому что отношение hasMany и, возможно, вам следует создать фильтр, чтобы получить правильный идентификатор.
У Eloquent есть еще один способ получить связь с предложением SQL where и другими.
$section->classs()->where('title', 'foo')->first();
Маленькие советы и если вы хотите попробовать.
При возврате представления вы можете с помощью метода ->with()
в Laravel использовать компактную функцию php для четкого вызова и кода.
return view('sections.index')->with(compact('sections', 'classs', 'users'));
"Свойство [классы] не существует в этом экземпляре коллекции. (Представление: C:\xampp\htdocs\jurs1\resources\views\sections\index.blade.php)"
Проверьте, является ли $section var вместо $cat в вашем представлении. Если вы находитесь в петле, это так. Если нет, попробуйте {{dd($section)}}
или {{dd($section->classs)}}
, чтобы проверить текущее значение вашей переменной.
где я должен проверить этот раздел $ в контроллере или лезвии?
Фигурные скобки доступны только в шаблоне блейда, поэтому, если вы хотите выполнить отладку в блейде, используйте код в моем комментарии выше. Вы также можете использовать функцию laravel dd($yourVariableName)
в своем контроллере.
Мне очень жаль, что я так плохо с этим справляюсь. Не могли бы вы изменить мой код, как вы просите, и скажите мне, что это за функции?
Это работает для меня... немного долго, но просто
{{ \Illuminate\Support\Facades\DB::table('class')->where('id',$cat->class_id)->value('name')}}
$section->class() или $class->section()