Laravel, Eloquent: отношения.Напишите две сущности в 1 строке - PullRequest
0 голосов
/ 31 мая 2018

Есть 3 объекта.Статья, Пользователь и Категория.Статья

class Article extends Model{
  public function user()
  {
     return $this->belongsTo(User::class);
  }

 public function category()
    {
      return $this->belongsTo(Category::class);
    }
}

Пользователь

class User extends Authenticatable{
public function articles()
  {
      return $this->hasMany(Article::class);
  }

Категория

class Category extends Model{
public function articles()
  {
    return $this->hasMany(Article::class);
  }
}

Чтобы сохранить пользователя, который создал статью в базе данных, я использую следующий код в контроллере:

    class TestController extends Controller
{
    public function test()
    {
      $user = Auth::user();
      $article = new Article(['name' => 'test']);

      //save record
      $user->articles()->save($article);
}

}

Но мне также нужно сохранить категорию статьи в таблице со статьями.Я получаю категорию статьи в контроллере:

$category = Category::find(2);

Но как мне сохранить эти две сущности ($ user и $ category) внутри $ article.Мне нужно иметь две ячейки в таблице статей - user_id и category_id.Скажите пожалуйста.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Используйте метод associate.

class TestController extends Controller
{
    public function test()
    {
        $user = Auth::user();
        $category = Category::first(); // find category

        $article = Article::create(['name' => 'test']); //save record

        $article->user()->associate($user); 
        $article->category()->associate($category);
    }
}
0 голосов
/ 31 мая 2018

Установите идентификаторы вручную:

$article->user_id = Auth::id();
$article->category_id = $category->id;
$article->save();
...