Как я могу получить доступ к значению не первичного ключа в таблице CrossRef, созданной Propel?

По сути, у меня есть отношение N: M (между таблицами «планы» и «подписки»). Первичные ключи планов и надстроек являются первичными ключами этого отношения N: M, это отношение N: M также имеет атрибут «цена».
Поскольку мне нужно обновить атрибут price в этой таблице, я не могу понять, как получить к нему доступ с помощью классов, сгенерированных Propel.
Как я вижу, кажется, что у классов Plan и Subscription нет методов, позволяющих мне делать то, что мне нужно.

Это часть моего schema.xml, где объявлены эти древовидные отношения (планы, подписки и их CrossRef)

<table name="subscriptions" phpName="Subscription">
<column name="id_subscription" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
<column name="name" type="varchar" required="true"/>
<column name="description" type="longvarchar" required="true"/>
</table>

<table name="planes_subscriptions" isCrossRef="true">
<column name="id_plan" type="integer" primaryKey="true"/>
<column name="id_subscription" type="integer" primaryKey="true"/>
<column name="price" type="real"/>

<foreign-key foreignTable="planes" onDelete="CASCADE" onUpdate="CASCADE">
<reference local="id_plan" foreign="id_plan"/>
</foreign-key>
<foreign-key foreignTable="subscriptions" onDelete="CASCADE" onUpdate="CASCADE">
<reference local="id_subscription" foreign="id_subscription"/>
</foreign-key>
</table>

<table name="planes" phpName="Plan">
<column name="id_plan" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
<column name="name" type="varchar" required="true"/>
<column name="description" type="longvarchar" required="false"/>
<column name="price" type="real" required="true"/>
</table>

Я думал о том, что для этого мне, возможно, придется кодировать некоторые вещи на классах, сгенерированных Propel, но я не могу понять, как получить доступ к строке этой таблицы по ее первичным ключам.

Я исследовал документацию Propel, но они не рассматривают этот конкретный случай:

Блог: отношения «многие ко многим»: проверьте!

Основные отношения

0

Решение

Это был просто вопрос ночи (на самом деле рассвет-утро) хорошего сна и повторного исследования этого.

Есть способ обновить объекты с помощью методов, созданных Propel. Мне просто нужно было отфильтровать мой ObjectQuery (planSubscriptionQuery) по его основным ключам

// Create planSuscription query
$planSubscription = PlanesSubscriptionsQuery::create()->
// filter the query by plan and subscription ids
filterByIdPlan($idPlan)->filterByIdSubscription($idSuscripcion)->
// Magic comes here: an associative array with the value to update
update(array('Price' => $newSubscriptionPrice));
// Just checking amount of affected rows
echo $planSuscripcion;

ВАЖНЫЙ: Обратите внимание, что в ассоциативном массиве значение столбца начинается с заглавной буквы (прис). Насколько я мог видеть, это потому, что Propel внутренне работает с этим. Если имя вашего столбца состоит из двух или более слов, каждое слово в первой букве будет заглавным: например, яdприс или MYSуперwesomeСolumnNAME

Я нашел здесь вопрос, который заставил меня осознать это, Мой файл schema.xml был в порядке, но я пытался получить доступ к столбцу с подчеркнутым именем, заданным в файле schema.xml (цена, id_plan, id_subscription и т. д.), что неверно.

Я надеюсь, что это помогает кому-то.

0

Другие решения

Других решений пока нет …