Я пытаюсь создать ресурс API, где я могу просмотреть сборку ответов из трех таблиц.
В настоящее время я могу зайти в магазин (есть несколько магазинов), используя маршруты (api/store/orders) и просмотреть заказы в ответе JSON.
отклик
{
data: [
{
id: 1,
code: "1f",
status: "waiting",
user_name: "Salman",
created_at: "",
updated_at: ""
},
{
id: 2,
code: "2f",
status: "waiting",
user_name: "Jerome",
created_at: "",
updated_at: ""
}
]
}
Однако, когда я пытаюсь добавить свои покупки в ответ с помощью:
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class Orderresource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'code' => $this->code,
'status' => $this->status,
'user_name' => $this->user_name,
// Added purchases
'order' => $this->purchases,
'created_at' => (string) $this->created_at,
'updated_at' => (string) $this->updated_at,
];
}
}
Я получаю ответ об ошибке Undefined property: stdClass::$purchases
Теперь я добавил покупки в свою модель заказа с помощью:
public function purchases()
{
return $this->hasMany(Purchase::class);
}
Однако я знаю, что заказ может лежать на моем show_order_per_store.
функция в моем OrderController
public function show_order_per_club($id)
{
$order = DB::table('orders')->where('store_id', '=', $id)->get();
return Orderresource::collection($order);
}
Теперь эта функция получает все заказы из похожих магазинов, но как мне добавить покупки в ответ API магазинов?
Короче говоря, я пытаюсь получить ответ API для каждого магазина с заказами, которые у него есть, и покупки принадлежат этому заказу.
Вместо использования DB:table
для запроса попробуйте использовать модель напрямую:
Order::where('store_id', '=', $id)->get();
Кажется, что DB:table
возвращает stdClass
объектов, поэтому ему не хватает всех виртуальных атрибутов, которые может предоставить модель.
@Salman Это стандартное предложение SQL where. Он делает то же самое, что и DB::table()->where()
, только в запросе автоматически устанавливается соответствующее имя таблицы.
спасибо, постараюсь проверить, может ли этот метод работать. Не могли бы вы объяснить мне немного больше, что делает
::where
?