Estoy tratando de adjuntar "modelo de elementos" al "modelo de eventos".

Modelo del artículo:

public function events()
{
   return $this->belongsToMany('App\Event', 'event_item');
}

Modelo de evento

public function items()
{
   return $this->belongsToMany('App\Item', 'event_item');
}

Modelo de usuario

public function items()
{
   return $this->hasMany('App\Item', 'user_id');
}

EventsController

public function store(Request $request)
{
  // Get user
  $user = $request->user();

  // Create event
  $event = Event::create(array_merge($request->all(), ['user_id' => $user->id]));

  // Attach items to event
  $user->items()->attach($event->id);

}

Mi usuario tiene múltiples elementos. Todos los elementos de usuario deben adjuntarse a eventos en la función de tienda. Me sale este error Método Illuminate \ Database \ Query \ Builder :: attach no existe.

1
Northify 10 may. 2019 a las 04:36

3 respuestas

La mejor respuesta

Pude resolver esto, un error fácil en realidad. Quiero adjuntar elementos a eventos pero en mi pregunta original tengo usuarios adjuntando elementos.

Cambió esto:

// Attach items to event
$user->items()->attach($event->id);

A esto:

// Attach items to event
$event->items()->attach($user->items);

Funciona como se espera ahora.

0
Northify 10 may. 2019 a las 13:52

La función de elementos User model tiene que devolver una relación BelongsToMany para poder usar attach ().

Modelo de usuario:

public function items() {
      return $this->belongsToMany('App\Item');
    }
0
Affan Malik 10 may. 2019 a las 06:38

Modelo de usuario:

 return $this->hasMany('App\Item', 'item_id');
0
Blood 10 may. 2019 a las 01:42