Dynamically select/restrict فیلد ها در Ecto

درود خدمت دوستان و اساتید . اول سعی کردم این پست را در یک پست دیگر به عنوان یک پاسخ بزارم ولی دیدم پست مهمی هست بهتره یک پست کامل برای خودش داشته باشه .

لازم به ذکر هست وقتی شما می خواهید یک query در ecto بزنید و تمام فیلد های یک جدول رو بکشید بیرون در اون زمان به مشکل تایپ می خورید که چرا انقدر باید اسم هارو ذکر کنید به هر صورت اروری نیز در ترمینال برای شما ثبت می شود

** (Ecto.QueryError) PostgreSQL does not support selecting all fields from "cms" without a schema. Please specify a schema or specify exactly which fields you want to select in query:

حال در گیت هاب الکسیر چندین راه برای این موضوع قرار داده که بنده به شخصه خوشم نیومد چون باز تایپ کردن رو داره ولی به هر صورت نحوه query زدن و همینطور استفاده مناسب می تونه خیلی جالب باشه

دو سه مثال اول رو در این پست قرار دادم برای آشنایی برای اطلاعات بیشتر به لینک منبع پیوست کرده مراجعه کنید روش های زیادی رو پیشنهاد داده هم با join هم بدون join

لینک منبع

روش اول استفاده از Using {…} syntax

یکی از راه حل ها نوشتن به صورت زیر هست

from p in Post, where: p.published, select: p.{name, title, published_at}

به صورت داینامیکش می شه

only = [:name, :title, :published_at]
from p in Post, where: p.published, select: p.{^only}

لازم به ذکر هست مشکلی نیز با موارد بالا داشتم که در لینک زیر مطرح کردم که یک سری بحث در پیرو اون شکل گرفت