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.
2 Antworten
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';
}
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 !!)
Neue Fragen
mysql
MySQL ist ein kostenloses Open-Source-RDBMS (Relational Database Management System), das SQL (Structured Query Language) verwendet. Verwenden Sie dieses Tag NICHT für andere DBs wie SQL Server, SQLite usw. Dies sind verschiedene DBs, die alle ihre eigenen SQL-Dialekte verwenden, um die Daten zu verwalten.