Как получить модель через отношения многие ко многим в Laravel - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть следующая ситуация в Laravel, просто представьте следующее:

task -([many-to-many]- task_user -[many-to-many])- user -[one-to-one]- info

Я могу перейти от задачи к пользователю, но, к сожалению, не могу получить информацию.

Кто-нибудь знает, что мне не хватает?

Модель: задача

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{

    public $table = "tasks";
    public function taskuser(){
         //task->task_user->user->info
        return $this->belongsToMany(User::class,'task_user');
}

, когда я добавляю -> ownTo (Info :: class) к функции Taskuser Я получаю следующую ошибку:

Illuminate\Database\Eloquent\RelationNotFoundException
Call to undefined relationship [taskuser] on model [App\Models\Task].

Я определенно что-то упускаю, но что?

РЕДАКТИРОВАТЬ: информационная модель работает с пользователем как пользователь-> информация дает правильные результаты Модель пользователя:

public function info()
{
    return $this->hasOne('App\Models\Info');
}

РЕДАКТИРОВАТЬ: контроллер

$task= Task::whereBetween('datetime',array($start,$end))->with('tasktype','taskuser')->get();

РЕДАКТИРОВАТЬ: соответствующие таблицы

    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('username');
        $table->rememberToken();
        $table->timestamps();

    Schema::create('infos', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned(); //internal id
        $table->string('name');  
        #foreign references
        $table->foreign('user_id')->references('id')->on('users');  

    Schema::create('tasks', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('task_types_id')->unsigned();  
        $table->string('title');  
        $table->datetime('datetime');  
        $table->integer('length'); 
        $table->string('description')->nullable(); 
        $table->integer('updated_by')->unsigned(); 
        $table->timestamps();
        #foreign references
        $table->foreign('task_types_id')->references('id')->on('task_types');
        $table->foreign('updated_by')->references('id')->on('users');           

    Schema::create('task_users', function (Blueprint $table) {
        $table->integer('task_id')->unsigned(); 
        $table->integer('user_id')->unsigned(); 
        #foreign references
        $table->foreign('task_id')->references('id')->on('tasks');
        $table->foreign('user_id')->references('id')->on('users');

1 Ответ

0 голосов
/ 21 февраля 2020

Читая больше документации Laravel, в частности https://laravel.com/docs/6.x/eloquent-relationships#eager -загрузка

добавление .info

     $task= Task::whereBetween('datetime',array($start,$end))
     ->with('tasktype','taskuser.info')
     ->get();

сейчас оно работает.

...