Как увидеть поля таблицы из внешних ключей в Laravel - PullRequest
0 голосов
/ 06 апреля 2019

Я новичок в 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);
}

Blade / View

<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>
</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');
    }

}

Ответы [ 3 ]

1 голос
/ 07 апреля 2019

Все, что вам нужно сделать, это

data-myclassid="{{$cat->class_id}}"

вместо этого попробуйте это

data-myclassid="{{ \Illuminate\Support\Facades\DB::table('class')->where('id',$cat->class_id)->value('name')}}"

Я предполагаю, что имя вашей таблицы - это class, так как вы хотите показать имя класса, чтобы в этом имени класса базы данных (имя столбца) было бы просто 'name', поэтому я помещаю имя в поле значения ....

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

Вы должны заявить о своих отношениях вообще. В вашем Пользователь Модель,

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

и Класс Модель,

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

Итак, после этого вы можете называть это так;

public function index()
{

    $sections = Section::all();
    $classs = Classs::with('user')->get();
    $users = User::with('class')->get();


    return view('sections.index')
        ->with('sections', $sections)
        ->with('classs', $classs)
        ->with('users',$users);
}

Или вы можете позвонить им, когда вы получаете в поле зрения просто так;

@foreach($users->class()->get() as $class )
    {{ $class->name}}
@endforeach

@foreach($classes->users()->get() as $user )
    {{ $user->name}}
@endforeach

они называли «Красноречивые отношения» Отношения Ларавела

просто убедитесь, что вы их прочитали, потому что документация слишком ясна, чтобы что-то понять в рекордные сроки.

hasOne и hasMany - всего лишь пример. Какой тип отношения работает для вас, вы можете изменить.

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

Это довольно легко сделать именно то, что вы хотите.Laravel отлично умеет создавать отношения.

Вам нужно настроить модель классов как отношение в вашей пользовательской модели.См. документы о том, как это сделать

Должно быть что-то близкое к этому в Модель пользователя :

public function class(){
        return $this->belongsTo(\App\Class::class);
}

Затем, когда вывытащив пользователей из базы данных в контроллере , вы можете напрямую включить отношения:

$users= \App\User::with('class')->get();

Теперь у вас есть модель связанного класса в вашей коллекции для каждого из ваших пользователей, выВы можете перетащить имя напрямую, как пожелаете, в своем представлении блейда :

@foreach($users as $user)
   {{$user->class->name}}
@endforeach

Сначала я предлагаю протестировать этот простой дамп, поскольку это будет работать.Затем вы можете попробовать присоединить различные модели, такие как категории, позже.

Кстати, использование Class в качестве имени класса может вызвать проблемы.Предложите небольшое изменение.

HTH

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