App \ Задачи :: первый () -> проекты;в ремесленнике тинкер возвращает ноль, несмотря ни на что :( - PullRequest
1 голос
/ 03 июня 2019

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

App\Task::first()->projects;

Уже пробовал переименовывать имена методов, имена столбцов в миграциях, пробовал выходить из tinkerи снова войдите в систему

Миграция проекта

public function up()
    {
        Schema::create('projects', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->text('title');
            $table->string('description');
            $table->timestamps();
        });
    }

Миграция задач

public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedInteger('project_id');
            $table->string('description');
            $table->boolean('completed')->default(false);
            $table->timestamps();
        });
    }

Project.php

use App\Task;

class Project extends Model
{
    protected $fillable = ['title','description'];

    public function tasks(){
      return $this->hasMany(Task::class);
    }
}

Task.php

use App\Project;

class Task extends Model
{
  protected $fillable = [
    'completed'
  ];
  public function projects(){
    return $this->belongsTo(Project::class);
  }
}

Если бы кто-то мог просто просмотреть этот фрагмент кода и сообщить мне, где я допустил какие-либо обычные \ идиотские ошибки (так как я новичок в привязке модели), это было бы очень полезно!

1 Ответ

3 голосов
/ 03 июня 2019
  • Задача принадлежит проекту, поэтому переименуйте проекты в проект, как он является единичным. Если вы сохраняете проекты, укажите имя столбца в качестве второго параметра:
public function projects(){
   return $this->belongsTo(Project::class, 'project_id');
}

// I suggest this
public function project(){
   return $this->belongsTo(Project::class);
}
  • Типы столбцов у вас разные, для идентификатора проекта вы используете Big Integer и для ссылки вы используете Integer, так что это:
$table->unsignedInteger('project_id');

должно быть так:

$table->unsignedBigInteger('project_id');

// also good to make the relationship on the Database level:

$table->foreign('project_id')->references('id')->on('projects')->onDelete('cascade');
...