মতবাদ 2 এবং একাধিক টু লিঙ্ক সারণী অতিরিক্ত ক্ষেত্র সহ


88

(আমার অসংলগ্ন প্রশ্নের জন্য দুঃখিত: আমি এই পোস্টটি লেখার সময় কিছু প্রশ্নের উত্তর দেওয়ার চেষ্টা করেছি, তবে এখানে এটি :)

আমি একটি লিঙ্ক টেবিলের অভ্যন্তরে একাধিক থেকে অনেকের সাথে একটি ডেটাবেস মডেল তৈরি করার চেষ্টা করছি, তবে যার প্রতি লিঙ্কেরও মূল্য রয়েছে, এক্ষেত্রে স্টক-রক্ষণ টেবিল। (আমার আরও বেশি সমস্যার মুখোমুখি হওয়ার এটি একটি প্রাথমিক উদাহরণ, তবে আমি ভেবেছিলাম যে আমি চালিয়ে যাওয়ার আগে এটি কেবল এটি দিয়ে পরীক্ষা করে দেখি)।

একটি বেসিক মাল্টি-স্টোর, মাল্টি-প্রোডাক্ট স্টোর-কিপিং সিস্টেমের জন্য ডেটাবেস মডেল

আমি এই সহজ উদাহরণের জন্য দুটি সত্তা স্টোর এবং পণ্য উত্পন্ন করতে এক্সপোর্টএমডব্লিউ ব্যবহার করেছি , উভয়টি নীচে প্রদর্শিত হবে।

যাইহোক, এখন সমস্যাটি হ'ল আমি ডক্ট্রাইন ব্যবহার করে কীভাবে স্টক.অ্যামাউন্ট মান (স্বাক্ষরিত int, এটি নেতিবাচক হতে পারে) অ্যাক্সেস করতে পারি তা বুঝতে পারি না। এছাড়াও, আমি যখন মতবাদের orm: স্কিমা-সরঞ্জাম: তৈরির ফাংশন ব্যবহার করে সারণীগুলি তৈরি করার চেষ্টা করি

ডাটাবেস বিন্যাসটি হেইডিএসকিউএল থেকে দেখা যায়

এটি কেবল দুটি সত্তা এবং তিনটি টেবিল পেয়েছে, একটি মান ব্যতীত একটি লিঙ্ক টেবিল এবং দুটি ডেটা টেবিল, একাধিক থেকে বহু সম্পর্কগুলি নিজেরাই সত্তা নয় তাই আমার কেবল সত্তা হিসাবে পণ্য এবং সঞ্চয় থাকতে পারে।

সুতরাং, যৌক্তিকভাবে, আমি আমার ডাটাবেস মডেলটি পরিবর্তনের চেষ্টা করেছি সঞ্চয় এবং পণ্য সম্পর্কিত সম্পর্কের সাথে একটি পৃথক টেবিল হিসাবে স্টক রাখতে। সমস্যার ক্ষেত্র হিসাবে এটি বাদ দিতে সক্ষম হয়ে আমি ক্ষেত্রের নামগুলিও আবার লিখেছি:

ডাটাবেস বিন্যাস পরিবর্তন

তারপরে আমি যা পেয়েছি তা হ'ল আমি এখনও স্টক সত্তা পাই নি ... এবং ডাটাবেসে নিজেই একটি 'পরিমাণ' ক্ষেত্র নেই।

আমার এই স্টোর এবং পণ্যগুলিকে স্টক টেবিলের (অন্য জিনিসগুলির মধ্যে) একসাথে আবদ্ধ করতে সক্ষম হওয়া দরকার ... সুতরাং কেবলমাত্র পণ্যটিতে স্টক যুক্ত করা কোনও বিকল্প নয়।

root@hdev:/var/www/test/library# php doctrine.php orm:info
Found 2 mapped entities:
[OK]   Entity\Product
[OK]   Entity\Store

এবং যখন আমি ডাটাবেস তৈরি করি, এটি এখনও আমাকে স্টক টেবিলের সঠিক ক্ষেত্রগুলি দেয় না:

ডাটাবেস বিন্যাসটি হেইডিএসকিউএল থেকে দেখা যায়

সুতরাং, এখানে কিছু জিনিস অনুসন্ধান করে আমি জানতে পেরেছি যে অনেকগুলি থেকে বহু সংযোগগুলি সত্তা নয় এবং সুতরাং এর মান থাকতে পারে না। তাই আমি অন্যের সাথে সম্পর্কের সাথে এটি একটি পৃথক টেবিলে পরিবর্তন করার চেষ্টা করেছি, তবে এটি এখনও কার্যকর হয়নি।

আমি এখানে কি ভুল করছি?


ঠিক আছে, আমি বেশ কয়েকটি উল্লেখ করে বলেছি যে এই সম্পর্কগুলি রোধ করার পরামর্শ দিয়ে মতামত সহ ডক্ট্রাইন ব্যবহার করে বহু থেকে বহু সংযোগ স্থাপন করা সম্ভব নয় .. তবে আপনি যদি সত্যিই এমন পরিস্থিতির সাথে আবদ্ধ হন যেমন আমি বর্ণনা করেছি আমার আসল প্রশ্ন? আমার কাছে পুরো একটি ডাটাবেস আছে, যা ম্যাজেন্টোর সাথে সামঞ্জস্যপূর্ণ, যা সম্পূর্ণরূপে বহু থেকে বহু সম্পর্কের উপর নির্ভর করে। তাই মূলত আমাকে বলা হচ্ছে "মতবাদ ওআরএম বহু-বহু-লোককে পরিচালনা করতে পারে না, এটি ব্যবহার করবেন না" ??
হেনরি ভেন মেগেন

আরও দেখুন
ডক্ট্রাইন

4
আমি আপনাকে এত সুন্দর উপায়ে কী ভাবছিলাম তা সঠিকভাবে ব্যাখ্যা করতে যে চেষ্টা করেছি তার জন্য যদি আমি +100 দিতে পারি :-)
টর্স্টেন রমার

উত্তর:


143

অতিরিক্ত মানগুলির সাথে একাধিক সংখ্যক সংযুক্তি বহু-বহু-বহু নয়, প্রকৃতপক্ষে এটি একটি নতুন সত্তা, কারণ এখন এটির একটি সনাক্তকারী (সংযুক্ত সত্তার সাথে দুটি সম্পর্ক) এবং মান রয়েছে।

যে কারণে কেন অনেক সাথে অধিকের সমিতির তাই বিরল: আপনি যেমন তাদের মধ্যে অতিরিক্ত বৈশিষ্ট্য সঞ্চয় করতে ঝোঁক sorting, amountইত্যাদি

আপনার সম্ভবত যা দরকার তা হ'ল অনুসরণ করার মতো (আমি উভয় সম্পর্ককে দ্বি নির্দেশমূলক করে তুলেছি, তাদের মধ্যে কমপক্ষে একটিকে এক-দিকনির্দেশক করে বিবেচনা করুন):

পণ্য:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="product") @ORM\Entity() */
class Product
{
    /** @ORM\Id() @ORM\Column(type="integer") */
    protected $id;

    /** ORM\Column(name="product_name", type="string", length=50, nullable=false) */
    protected $name;

    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product") */
    protected $stockProducts;
}

স্টোর:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="store") @ORM\Entity() */
class Store
{
    /** @ORM\Id() @ORM\Column(type="integer") */
    protected $id;

    /** ORM\Column(name="store_name", type="string", length=50, nullable=false) */
    protected $name;

    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store") */
    protected $stockProducts;
}

স্টক:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="stock") @ORM\Entity() */
class Stock
{
    /** ORM\Column(type="integer") */
    protected $amount;

    /** 
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts") 
     * @ORM\JoinColumn(name="store_id", referencedColumnName="id", nullable=false) 
     */
    protected $store;

    /** 
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts") 
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=false) 
     */
    protected $product;
}

ঠিক আছে, আমি কিছু গিটার এবং সেটটার যুক্ত করব, কারণ এই
সেটআপটির সাথে

আমি যখন এই সেটআপটি ব্যবহার করি এবং তারপরে স্টক.স্টোর_আইডি ব্যবহার করে কোয়েরি করার চেষ্টা করি তখন আমি ত্রুটি পেয়েছি "স্টোরের স্টোর_আইড নামে কোনও ক্ষেত্র বা সমিতি নেই"। এটি পাওয়া উচিত কারণ ডাটাবেসে কলামটি বিদ্যমান exists
আফিলিনা

@ আফিলিনা ডিবি স্কিমা তৈরি করার সময় কিছু যায় আসে না - ডিবিএল ব্যতিক্রম ছুঁড়ে দেয় কারণ এটি ডিডিএল মেটাডেটাতে (মেমরির ক্ষেত্রে) কলামটি খুঁজে পায় না
ওক্রামিয়াস

@ অ্যাক্রামিয়াস আমার অর্থ হ'ল ডিবি মেটাটাটা থেকে তৈরি হয়েছিল। যদি এটি কলামটি প্রথম স্থানে তৈরি করতে সক্ষম হয় তবে অনুসন্ধানের সময় এটি সন্ধান করা উচিত to আমার সমস্যার সমাধান ছিল স্টক স্টোরের সাথে কাঙ্ক্ষিত আইডির তুলনা করা।
আফিলিনা

আমার যা প্রয়োজন 100% এবং এটি একটি কবজির মতো কাজ করে! আপনি কি জানেন যে স্টোর এবং পণ্যাদির পরিমাণ সম্পাদনা করার জন্য ফিল্ডসেট সহ কীভাবে একটি ফর্ম তৈরি করবেন?
সিভিহিস্পেরার

17

মতবাদ বহু থেকে বহু সম্পর্ক ঠিকঠাক করে।

আপনার যে সমস্যাটি হচ্ছে তা হ'ল আপনার একটি সাধারণ ম্যানটোমেন অ্যাসোসিয়েশনের দরকার নেই, কারণ সমিতির "অতিরিক্ত" ডেটা থাকতে পারে না।

আপনার মাঝারি (স্টক) সারণী, যেহেতু এতে প্রোডাক্ট_আইডি এবং স্টোর_আইডের চেয়ে বেশি রয়েছে, সেই অতিরিক্ত ডেটা মডেল করার জন্য নিজস্ব সত্তা প্রয়োজন।

সুতরাং আপনি সত্যিই তিনটি শ্রেণীর সত্তা চান:

  • পণ্য
  • স্টকলেভেল
  • স্টোর

এবং দুটি সমিতি:

  • পণ্য ওয়ানটাইমেন স্টক লেভেল
  • ওয়ান টোমনি স্টক লেভেল সঞ্চয় করুন

4
আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ ! আমি আমার "স্টক" তে টেবিলের মতো অতিরিক্ত ক্ষেত্র যুক্ত করেছি। যাইহোক, মতবাদ এখনও এই "যোগদানের টেবিল" হিসাবে বিবেচনা করে না এবং php app/console doctrine:mapping:import AppBundle ymlডাটাবেস থেকে স্কিমা আমদানি করার জন্য যখন আমি দৌড়ে যাই তখন এড়িয়ে যায় । আমি এটি অতিরিক্ত ম্যাপিং ইয়েল ফাইলটি তৈরি করতে চাই। কারও কি কোনও আইডিয়া আছে? :(
স্টাফেন

"সংযোগ" সত্তায় ডেটা লেখার সমাধান না করে উত্তর দিন। এটা একটা সমস্যা. সত্তা ঘোষণা না। কেউ দয়া করে সমর্থন করতে পারেন যেখানে ডেটা ফর্ম থেকে পাস করা হয়েছে (কালেকটিটাইপ ফিল্ডটি এন্টিটাইপ ক্ষেত্রের সাথে ফর্ম এমবেড করেছে)। আমি এম্বেড করা ফর্ম থেকে মূল ফর্মের মধ্যে ডেটা পাস করতে পারি না, এবং ক্ষেত্রগুলি সঠিকভাবে সংগ্রহ করতে পারি না
জুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.