0
votes

Laravel avec où une condition comme une relation

J'ai un modèle de collaboration avec une relation sous la relation ci-dessous.

public function __construct(WorkPackage $workPackage)
{
    $this->workPackage = $workPackage;
    $this->setModel(WorkPackage::class);
    $this->workItemRepository = app(WorkItemRepository::class);
}


2 commentaires

Pourriez-vous expliquer ce que vous essayez d'atteindre ici?


J'ai deux tables avec la relation ci-dessus conformément à la question, la table de travail a le «titre», la table «Project_id» et Work_Items possède des colonnes «Titre», «Titre», «Titre_package_id». Maintenant, je veux rechercher le mot-clé avec les deux table où la colonne de titre des deux table correspondra.


3 Réponses :


1
votes

où () code> fonctionne pour spécifier des filtres supplémentaires pour le modèle associé pour vérifier:

$result['data'] = $this->workPackage->whereHas('work_items', function ($query) use ($title) {
        $query->where('title', 'LIKE', "%{$title}%");
    })
    ->where('project_id', $projectId)
    ->where('title', 'LIKE', "%{$title}%")
    ->get();
return $result;


6 commentaires

vous avez besoin () après la collecte de travail pour la relation Not objet, $ ceci-> Workpackage () -> Où


@Omr Comment savez-vous cela? La question initiale ne l'a pas et nous ne connaissons pas le contexte dans lequel $ ceci existe


@Sta quand j'utilise où il est de ses données vides de retour, lorsque j'utilise avec alors au moins obtenir des données de table de travail avec des enregistrements correspondants. Et un problème est que je ne suis pas capable d'utiliser $ titre en $ Query-> où ("titre", "comme", "% {$ title}%"); erreur d'obtenir un titre non défini.


@TUSHAR Quoi de $ ceci-> Workpackage () -> Où ?


@Sta $ ceci-> Workpackage ne fonctionnera que de la collecte de travail () Cela ne fonctionnera pas, car j'ai créé un objet pour cela


@TUSHARDARKUMBHAR Vous devrez peut-être utiliser work_items.title dans les deux cas si le même nom de la colonne existe dans les deux tables car est converti en un SELECT * de work_backages Où existe (sélectionnez * de work_items où le titre comme?) Et titre comme? Vous obtiendriez donc un conflit dans ce cas



0
votes

Sous le code fonctionne pour moi. Merci à tout le monde de l'aide pour obtenir une réponse correcte.

   $result['data'] = $this->workPackage->with(['work_items' => function ($q) use ($title) {
        $q->where('title', 'LIKE', "%{$title}%");
    }])
        ->where('project_id', $projectId)
        ->where('title', 'LIKE', "%{$title}%")
        ->get();
    return $result;


1 commentaires

Vous simplement ajouter utiliser ($ titre) ?



0
votes

Je pense que votre problème sera résolu avec la méthode de jointure: xxx


0 commentaires