Company_master_id [PK]


CompanyMaster:

  • Angaben zum Unterzeichner des Unternehmens: (hat viele Eigentümer für ein einzelnes Unternehmen)
  • Name und andere Spalten

Company_master_id [FK]

  • company_signatory_details_id [PK]
  • Klicken Sie mit der rechten Maustaste auf das Textfeld
  • Name und andere Spalten

Jetzt möchte ich mit allen Eigentümern dieser Firma Unternehmensdetails erhalten. Folgendes habe ich versucht.

$this->CompanyMaster->bindModel(
    array(
        'hasMany' => array(
            'CompanySignatoryDetails' => array(
                'className' => 'CompanySignatoryDetails',
                'foreignKey' => false,
                'conditions' => array(
                    'CompanySignatoryDetails.company_master_id = CompanyMaster.company_master_id'
                ),
            ),
        )
    )
);


$this->CompanyMaster->recursive = 2;

$company = $this->CompanyMaster->find('first', array(
    'fields' => array('CompanyMaster.*'),
    'conditions' => $conditions,  //company id in condition
));

Ich erhalte folgenden Fehler:

Database Error 
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'CompanyMaster.id' in 'field list' 

SQL Query:
SELECT `CompanyMaster`.*, `CompanyMaster`.`id` FROM      `crawler_output`.`company_master` AS `CompanyMaster` WHERE `CompanyMaster`.`company_master_id` = 1 LIMIT 1

Bitte lassen Sie mich wissen, wie ich ein Modell ohne id als Spaltennamen binden kann.

0
Parixit 1 Jän. 2016 im 10:53

2 Antworten

Beste Antwort

CakePHP erzeugt beim Umgang mit hasMany - Beziehungen eine separate Abfrage. Daher können Sie kein Feld aus einer anderen Tabelle referenzieren. Nur belongsTo und hasOne Beziehungen erzeugen ein JOIN.

Und für {{X0}}:

$this->CompanyMaster->bindModel(array(
    'hasMany' => array(
        'CompanySignatoryDetails' => array(
            'className' => 'CompanySignatoryDetails',
            'foreignKey' => 'company_master_id',
        ),
    )
));

Vergessen Sie nicht, Ihre Primärschlüssel für CompanyMaster zu definieren:

class CompanyMaster extends AppModel 
{
    public $primaryKey = 'company_master_id';
}

Ich benutze CompanySignatoryDetails. Ich habe folgende Tabelle

class CompanySignatoryDetails extends AppModel 
{
    public $primaryKey = 'company_signatory_details_id';
}
1
Inigo Flores 2 Jän. 2016 im 11:16

Lassen Sie Ihre Anfrage beispielsweise so aussehen:

select CompanyMaster.*,CompanySignatoryDetails.* from
CompanyMaster as cm inner join CompanySignatoryDetails as cd on  
    cm.company_master_id=cd.company_master_id  
      order by cm.company_master_id; 

Sie erhalten alle Felder aus zwei Tabellen, sortiert nach dem Feld company_master_id. Sie können die Anzahl der von dieser Abfrage angezeigten Felder verringern, indem Sie sie explizit wie folgt festlegen:

select cm.company_master_id, cd.name from....

HNY! (Frohes Neues Jahr !!)

0
jvb 1 Jän. 2016 im 08:15