【问题标题】:symfony3, doctrine, leftJoinsymfony3, 教义, leftJoin
【发布时间】:2016-11-04 09:50:27
【问题描述】:

我以各种方式搜索了论坛并尝试了我能找到的所有解决方案。不幸的是,没有任何效果。我需要在教义中使用 leftJoin 并且无法管理。在 php 中,我的管理员一切正常。

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 变体。每次我得到不同的错误。

我的实体(我省略了 getter 和 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;

你能指出我正确的方向吗? 非常感谢。

【问题讨论】:

  • 显示你的存储库类文件。我确定您在存储库类中有语法问题。

标签: php symfony orm doctrine left-join


【解决方案1】:

我找到了问题的答案。

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

现在一切正常。

【讨论】:

    【解决方案2】:

    首先,您必须创建association mapping

    例子:

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

    之后,您的查询将如下所示:

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

    【讨论】:

    • 我已经尝试过了,但是当我添加关联映射时,我的应用程序刚刚停止工作,我将尝试您的解决方案并发表评论,如果它有效,但现在我找到了解决方案。我把它贴在下面。
    猜你喜欢
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2014-12-29
    • 1970-01-01
    • 2018-03-29
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多