Laravel - ne peut pas sauver relation morphToMany en boucle foreach

voix
0

Je les 2 modèles suivants dans une relation de morphToMany: Société et Tag

    public function tags(){
    return $this->morphToMany(Tag::class, 'taggable');
    }
    public function companies(){
    return $this->morphedByMany(Company::class, 'taggable');
    }

et j'ai l'action de travail suivante pour enregistrer 1 tag 1 entreprise:

   public function addTag($request){
        $company = Company::find($request->company_id);
        $company->tags()->syncWithoutDetaching($request->tag_id);
        return response()->json($company->tags, 201); 
    }

maintenant, je suis en train de faire la même chose avec de nombreuses entreprises et de nombreuses balises et il ne fonctionne pas. J'ai essayé « syncWithoutDetaching », « saveMany », en passant dans un tableau d'entiers ou des chaînes, je continue à avoir cette erreur:

 BadMethodCallException: Method Illuminate\Database\Eloquent\Collection::tags does not exist. in file /home/vagrant/.../vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php on line 100

Ceci est la fonction que je utilise:

        public function  multiCompanyAddTags($request){

        $tags = $this->createManyRecords('App\AppSections\CRM\Models\Tag', $request->new_tags);
        $tagIDs = $tags->map(function ($item, $key) { return $item->id;
        });

        foreach ($request->companies as $key=>$id) 
        {  
            $company = Company::with(['notes','tags','contacts','tasks'])->find($id);

            $company->tags()->syncWithoutDetaching($tagIDs);

            return response()->json($company, 201); 
        }
}
Créé 27/11/2018 à 15:15
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Quelqu'un m'a fait remarquer à la réponse: Lorsque vous appelez compagnie $ = Société :: avec ... dans ma boucle, l'appel retourne une collection et non la société.

Il me faut ensuite appeler le premier élément de la collection pour accéder à la société, comme suit:

$company[0]->tags()->syncWithoutDetaching($tagIDs);
Créé 28/11/2018 à 09:14
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more