Я пытаюсь получить доступ к свойствам пользовательского объекта в PHP:Доступ к свойствам объекта в PHP
<?php
namespace App\Classes;
use Illuminate\Database\Eloquent\Model;
class AED extends Model {
protected $table = 'aeds';
protected $fillable = ['owner', 'street', 'postal_code', 'locality', 'latitude', 'longitude', 'annotation_type'];
public $timestamps = true;
public $id;
public $owner;
public $object;
public $street;
public $postalCode;
public $locality;
public $latitude;
public $longitude;
public $annotation_type;
public $distance;
public function set($data) {
foreach ($data as $key => $value) {
if(property_exists($this, $key)) {
$this->$key = $value;
}
}
}
}
Код для доступа к этим свойствам:
<?php
namespace App\Transformer;
use App\Classes\AED;
use League\Fractal\TransformerAbstract;
class AEDTransformer extends TransformerAbstract {
public function transform(AED $aed) {
return [
'data' => $aed->owner
];
}
}
Когда я вызываю функцию, я получаю это как ответ:
{
data: [
{
data: null
}
],
meta: "TestMeta"
}
странная вещь, когда я только var_dump объекта я получаю полную информацию:
...
protected 'original' =>
array (size=11)
'id' => int 1
'owner' => string 'Owner 1' (length=7)
'object' => string 'Object 1' (length=8)
'street' => string 'Street 1' (length=8)
'postal_code' => string '11111' (length=5)
'locality' => string 'Locality 1' (length=10)
'latitude' => float 100
'longitude' => float 100
'annotation_type' => string '1' (length=1)
'created_at' => string '0000-00-00 00:00:00' (length=19)
'updated_at' => string '0000-00-00 00:00:00' (length=19)
...
Таким образом, данные могут быть взяты из базы данных, как ожидалось, и также принимаются. Почему тогда доступ не работает, и я получаю «нуль».
Я использую «установить» метод внутри пользовательской функции здесь:
class AEDHelper {
static public function searchAED($position) {
$var1 = $position['latitude'];
$var2 = $position['longitude'];
$var3 = $position['latitude'];
$queryResults = DB::select(DB::raw("SQLCODE"));
$results = [];
foreach ($queryResults as $results) {
$aed = new AED();
$aed->set($results);
$results[] = $aed;
}
return $results;
}
Здесь я создаю новый экземпляр AED(). Поэтому я предполагаю, что мне нужно определить свойства объекта, так как теперь не будет использоваться Eloquent, но для отображения результатов SQL должен быть создан пользовательский класс AED.
Вам не нужно определять поля в вашей модели. Eloquent делает их доступными динамически. –
Я удалил поля и теперь это работает. но что, если мне понадобятся поля позже, чтобы получить к ним доступ? Как правильно их заполнить? – sesc360