2016-11-04 5 views
-1

Ich suchte das Forum in jeder Hinsicht und versuchte jede Lösung, die ich finden konnte. Leider hat nichts geklappt. Ich muss leftJoin in der Lehre verwenden und kann nicht menage. In php my admin funktioniert alles einwandfrei.symfony3, Doktrin, leftJoin

SELECT a.`offer_id`, b.* FROM `location_to_job_offer` a LEFT JOIN `job_offer` b ON a.`offer_id` = b.`offer_id` WHERE `region_id` = 9 

Ich versuchte Anmerkung Verbände und Vereine und alle möglichen Variationen Querybuilder zu verwenden. Jedes Mal habe ich einen anderen Fehler bekommen.

Meine Einheiten (I ommited Getter und Setter):

AppBundle \ Entity \ JobOffer

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="job_offer") 
* @ORM\Entity(repositoryClass="AppBundle\Entity\JobOfferRepository") 
*/ 
class JobOffer 
{ 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $offerId; 

    /** 
    * @ORM\Column(name="reference_id", type="string", length=128) 
    */ 
    private $referenceId; 

    /** 
    * @ORM\Column(name="create_date", type="integer", length=128) 
    */ 
    private $createDate; 

    /** 
    * @ORM\Column(name="modify_date", type="integer", length=128) 
    */ 
    private $modifyDate; 

    /** 
    * @ORM\Column(name="expiration_date", type="integer", length=128) 
    */ 
    private $expirationDate; 

    /** 
    * @ORM\Column(name="offer_source", type="integer", length=2) 
    */ 
    private $offerSource; 

    /** 
    * @ORM\Column(name="trade1", type="integer", length=3) 
    */ 
    private $trade1; 

    /** 
    * @ORM\Column(name="trade2", type="integer", length=3) 
    */ 
    private $trade2; 

    /** 
    * @ORM\Column(name="trade3", type="integer", length=3) 
    */ 
    private $trade3; 

    /** 
    * @ORM\Column(name="subtrades", type="string", length=512) 
    */ 
    private $subtrades; 

    /** 
    * @ORM\Column(name="is_anonymous", name="is_anonymous", type="boolean") 
    */ 
    private $isAnonymous; 

    /** 
    * @ORM\Column(name="is_practice", type="boolean") 
    */ 
    private $isPractice; 

    /** 
    * @ORM\Column(name="is_internship", type="boolean") 
    */ 
    private $isInternship; 

    /** 
    * @ORM\Column(name="is_volunteering", type="boolean") 
    */ 
    private $isVolunteering; 

    /** 
    * @ORM\Column(name="is_any_form_of_employment", type="boolean") 
    */ 
    private $anyFormOfEmployment; 

    /** 
    * @ORM\Column(name="is_full_time", type="boolean") 
    */ 
    private $isFullTime; 

    /** 
    * @ORM\Column(name="is_part_time", type="boolean") 
    */ 
    private $isPartTime; 

    /** 
    * @ORM\Column(name="is_temporary_work", type="boolean") 
    */ 
    private $isTemporaryWork; 

    /** 
    * @ORM\Column(name="is_contract", type="boolean") 
    */ 
    private $isContract; 

    /** 
    * @ORM\Column(name="is_salary_scope_from", type="decimal", precision=10, scale=2) 
    */ 
    private $salaryScopeFrom; 

    /** 
    * @ORM\Column(name="is_salary_scope_to", type="decimal", precision=10, scale=2) 
    */ 
    private $salaryScopeTo; 

    /** 
    * @ORM\Column(name="salary_currency", type="integer", length=3) 
    */ 
    private $salaryCurrency; 

    /** 
    * @ORM\Column(name="reference_number", type="string", length=128) 
    */ 
    private $referenceNumber; 

    /** 
    * @ORM\Column(name="employer_name", type="string", length=246) 
    */ 
    private $employerName; 

    /** 
    * @ORM\Column(name="job_title", type="string", length=246) 
    */ 
    private $jobTitle; 

    /** 
    * @ORM\Column(name="company_desc", type="text") 
    */ 
    private $companyDesc; 

    /** 
    * @ORM\Column(name="job_desc", type="text") 
    */ 
    private $jobDesc; 

    /** 
    * @ORM\Column(name="job_needs", type="text") 
    */ 
    private $jobNeeds; 

    /** 
    * @ORM\Column(name="job_company_offers", type="text") 
    */ 
    private $jobCompanyOffers; 

    /** 
    * @ORM\Column(name="job_required_docs", type="text") 
    */ 
    private $jobRequiredDocs; 

    /** 
    * @ORM\Column(name="job_clause", type="text") 
    */ 
    private $jobClause; 

    /** 
    * @ORM\Column(name="job_extra", type="text") 
    */ 
    private $jobExtra; 

    /** 
    * @ORM\Column(name="job_company_contact_way", type="text") 
    */ 
    private $jobCompanyContactWay; 

    /** 
    * @ORM\Column(name="job_apply_send_email", type="string", length=128) 
    */ 
    private $jobApplySendEmail; 

    /** 
    * @ORM\Column(name="job_apply_external_url", type="string", length=128) 
    */ 
    private $jobApplyExtUrl; 

    /** 
    * @ORM\Column(name="job_offer_status", type="boolean") 
    */ 
    private $jobOfferStatus; 

    /** 
    * @ORM\Column(name="search_first_letter", type="string", length=1) 
    */ 
    private $searchFirstLetter; 

    /** 
    * @ORM\Column(name="search_tags", type="text") 
    */ 
    private $searchTags; 

    /** 
    * @ORM\Column(name="offer_url", type="text") 
    */ 
    private $offerUrl; 

    /** 
    * @ORM\Column(name="countries_string", type="text") 
    */ 
    private $countriesString; 

    /** 
    * @ORM\Column(name="regions_string", type="text") 
    */ 
    private $regionsString; 

    /** 
    * Set referenceId 
    * 
    * @param string $referenceId 
    * 
    * @return JobOffer 
    */   

AppBundle \ Entity \ LocationToJobOffer:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="location_to_job_offer") 
* @ORM\Entity(repositoryClass="AppBundle\Entity\LocationToJobOfferRepository") 
*/ 
class LocationToJobOffer 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $locId; 

    /** 
    * @ORM\Column(name="offer_id", type="integer", length=128) 
    */ 
    private $offerId; 

    /** 
    * @ORM\Column(name="country_id", type="integer", length=128) 
    */ 
    private $countryId; 

    /** 
    * @ORM\Column(name="country_name", type="string", length=128) 
    */ 
    private $countryName; 

    /** 
    * @ORM\Column(name="region_id", type="integer", length=128) 
    */ 
    private $regionId; 

    /** 
    * @ORM\Column(name="region_name", type="string", length=128) 
    */ 
    private $regionName; 

    /** 
    * @ORM\Column(name="city_id", type="integer", length=128) 
    */ 
    private $cityId; 

    /** 
    * @ORM\Column(name="city_name", type="string", length=128) 
    */ 
    private $cityName; 

    /** 
    * @ORM\Column(name="address", type="string", length=128) 
    */ 
    private $address; 

    /** 
    * @ORM\Column(name="lat", type="float", length=128) 
    */ 
    private $lat; 

    /** 
    * @ORM\Column(name="lng", type="float", length=128) 
    */ 
    private $lng; 

Können Sie mir zeigen in die richtige Richtung damit bitte? Vielen Dank im Voraus.

+0

Zeigen Sie mir Ihre Repository-Klassen-Datei. Ich habe sicher, dass Sie Syntaxfehler in der Repository-Klasse haben. –

Antwort

0

Zuerst müssen Sie association mapping erstellen.

Beispiel:

... 
class LocationToJobOffer 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="JobOffer") 
    * @ORM\JoinColumn(name="offer_id", referencedColumnName="id") 
    */ 
    private $jobOffers; 
... 
class JobOffer 
{ 
    /** 
    * @OneToMany(targetEntity="LocationToJobOffer", mappedBy="jobOffers") 
    */ 
    private $locationToJobOffer; 
... 

Nachdem es, deine Abfrage wird wie folgt aussehen:

$query = $this->createQueryBuilder('LocationToJobOffer') 
->select('LocationToJobOffer', 'JobOffers') 
->leftJoint('LocationToJobOffer.jobOffers', 'JobOffers') 
->where('LocationToJobOffer.regionId = 9') 
->getQuery(); 
+0

Ich habe das schon ausprobiert, aber als ich die Zuordnungszuordnung hinzugefügt habe, hat meine App einfach aufgehört, ich werde Deine Lösung ausprobieren und einen Kommentar posten, wenn es funktioniert, aber gerade jetzt habe ich eine Lösung gefunden. Ich poste es unten. –

1

ich die Antwort für mein Problem gefunden.

AppBundle \ Entity \ JobOfferRepository

<?php 

namespace AppBundle\Entity; 

/** 
* JobOfferRepository 
* 
* This class was generated by the Doctrine ORM. Add your own custom 
* repository methods below. 
*/ 
class JobOfferRepository extends \Doctrine\ORM\EntityRepository 
{ 

    public function getPaginateOffersbyRegion($currentPage = 1, $quantity = 5, $regId) 
    { 
     $firstResult = ($currentPage * $quantity) - $quantity; 

     return $this->createQueryBuilder('p') 
       ->select('p') 
       ->leftJoin('AppBundle:LocationToJobOffer', 'u', 'WITH', 'u.offerId = p.offerId') 
       ->addSelect('u.cityName') 
       ->where('u.regionId = :regId') 
       ->setParameter('regId', $regId) 
       ->addOrderBy('p.offerId', 'DESC') 
       ->setFirstResult($firstResult) 
       ->setMaxResults($quantity) 
       ->getQuery() 
       ->getArrayResult(); 
    }   
} 

Und alles funktioniert jetzt einwandfrei.