Еще один более простой вариант:
> x = c(1, 1, 2, 4, 5, 2, 1, 3, 2)
> x[x==1] <- 0
> x
[1] 0 0 2 4 5 2 0 3 2
JB, обратите внимание, что вместо:
SELECT *
FROM half l
JOIN half r ON l.whole_id=r.whole_id AND l.half_id<>r.half_id
WHERE l.half_id='L';
вы можете написать тот же запрос, используя:
SELECT *
FROM half l
JOIN half r ON l.whole_id=r.whole_id
WHERE l.half_id<>r.half_id AND l.half_id='L';
, который вернет те же данные и определенно легче выразить с помощью DBIx :: Class.
Конечно, это не отвечает на вопрос «Как мне сделать таблицы соединения DBIx :: Class, используя другие операторы, кроме =
?», Но показанный вами пример не оправдывает такую необходимость.
Вы пробовали:
__PACKAGE__->has_one(dual => 'Schema::Half', {
'foreign.whole_id' => 'self.whole_id',
'foreign.half_id' => {'<>' => 'self.half_id'},
});
Я считаю, что критерии соответствия в определении взаимосвязи такие же, как и при поиске.
Я думаю, что вы могли бы сделать это, создав новый тип отношений, расширяющий DBIx :: Class :: Relationship :: Base
, но это не кажется невероятно хорошо документированным . Рассматривали ли вы возможность простого добавления удобного метода в набор результатов для Half
, который выполняет -> поиск ({}, {join => ...}
и возвращает Это не самоанализ, как отношения, но в остальном он также работает. Он использует способность DBIC связывать запросы в вашу пользу.
Вот как это сделать:
...
field => 1, # =
otherfield => { '>' => 2 }, # >
...