2016-11-04 2 views
-1

모든면에서 포럼을 검색하고 찾을 수있는 모든 솔루션을 시도했습니다. 불행히도 아무 것도 효과가 없었습니다. 교리에 leftJoin을 사용해야하고 징계 조치를 할 수 없습니다. PHP는 내 관리자가 잘 작동합니다.symfony3, doctrine, 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 

주석 어소시에이션과 가능한 모든 queryBuilder 변형을 사용하려고했습니다. 때마다 다른 오류가 발생했습니다.

AppBundle \ 법인 \ 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 \ 엔티티 \ 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; 

당신은 오른쪽 날 포인트

내 엔티티 (나는 getter 및 setter를 ommited) 이것으로 방향을 알려주세요. 미리 감사드립니다.

+0

저장소 클래스 파일을 보여주십시오. 저장소 클래스에서 구문 문제가 발생했습니다. –

답변

0

우선 association mapping을 만들어야합니다.

예 : 내 문제에 대한 해답을 발견

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

이미 시도했지만 연관 매핑을 추가 할 때 내 앱이 작동을 멈추었습니다. 문제가 해결되면 솔루션을 시도하고 댓글을 달았습니다.하지만 지금은 해결책을 찾았습니다. 나는 그것을 아래에 게시한다. –

1

: 같은

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

이 후, 당신 쿼리 볼 것이다. AppBundle \ 엔티티 \ 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(); 
    }   
} 

그리고 모든

지금은 잘 작동합니다.