2016-11-04 47 views
-1

私はあらゆる面でフォーラムを検索し、見つけたすべてのソリューションを試しました。残念ながら何も働かなかった。私は教義にleftJoinを使用する必要があり、menageageすることはできません。 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バリエーションを使用しようとしました。たびに私は別のエラーを得た。

私のエンティティ(私はゲッターとセッターをommited):

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; 

あなたは右に私を指すことができますこれはどうですか? 事前に感謝します。

+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(); 
    }   
} 

、すべて今だけで正常に動作します。

関連する問題