CodeIgniter'daki veri katılmak ile çalışmak nasıl?

1 Cevap php

I am having a play around with codeigniter and trying to get my head around the active record system and such like. I have set up a couple of tables and am attempting to run a join on them, as such:

function GetOrganisationsAndBuildingDetails()
{
	$this->db->select('organisations.organisation_name,
					   organisations.organisation_id,
					   buildings.building_name,
	                   buildings.address1');
	$this->db->from('organisations')->join('buildings', 'buildings.organisation_id = organisations.organisation_id');
	$query = $this->db->get();
	return $query->result();
}

Benim veritabanında ben ilgili iki bina ile bir organizasyon var. Yukarıdaki sorgu iki nesne (her bina için bir tane) verir - ancak, örgüt yineleniyor.

  • stdClass Object ( [organisation_name] => This is an example org [organisation_id] => 1 [building_name] => test building [address1] => 123456 )

  • stdClass Object ( [organisation_name] => This is an example org [organisation_id] => 1 [building_name] => teeeest building [address1] => 123456 )

I suppose I was expecting something along the lines of one return object with a series of nested objects for related buildings. Is this possible? If not, is their a recommend way of arranging the return data so I can easily loop through it in the view? (foreach org, foreach building etc etc).

Özür dilemek Ben burada biraz yoğun açıyorum. Im bu şeyler biraz farklı olduğu (özellikle LINQ to SQL). Net ve gelen)

1 Cevap

Dediğiniz gibi sorgu kaçınılmaz yinelenen veri dönecektir, sen böyle sonuç almak sonra bunları düzenlemek zorunda

$buildings = array();

foreach ( $result_object as $organization ) {
    $building_data = array(
        'building_name' => $organization->building_name,
        'address'       => $organization->address,
    );
    $buildings[$organization->organization_name][] = $building_data;
}

bu şekilde örgütler çok boyutlu dizinin ilk anahtarında "sıkıştırılmış" olacak, ve bir seviye derine binalar hakkında bilgi olacaktır. Umarım bu yardımcı olur.