Я использую typeorm, type-graphql и postgres, apollo-graphql-express в моем проекте. У меня есть некоторые проблемы с созданием или обновлением сущностей с помощью typeorm. Пример: я сделал запросы и мутации (по объяснению моей задачи), такие как
// Мутация registerRestaurant (имя: строка, адрес: строка, телефон: строка, тип: Int, restaurant_key: String, штаб-квартира: Int): Ресторан
// Обновление мутацийРесторан (restaurantId: Int !, имя: String, адрес: String, телефон: String, тип: Int, restaurant_key: String, штаб-квартира: Int): Restaurant
У сущности Restaurant есть свойство headquarter, которое возвращает сущность Headquarter (для случаев отношений), здесь есть проблема, из-за которой я не могу обновить или создать сущность Restaurant, используя id в качестве аргумента в мутации. (пример: в ресторане с обновлением мутаций мне нужно сменить штаб-квартиру с id = int, но ресторан entiry не позволяет мне сделать это из-за JoinColumn, я думаю)). Я буду очень рад, если вы обратите на это внимание, если на некоторые вопросы по поводу моего кода я отвечу, СПАСИБО!
@ObjectType()
@Entity("restaurants")
export class Restaurant extends BaseEntity {
@Field(() => Int)
@PrimaryGeneratedColumn()
id: number;
@Field()
@Column("text", { default: '' })
name: string;
@Field()
@Column("text", { default: '' })
address: string;
@Field()
@Column("text", { default: '' })
phone: string;
@Field(() => Int)
@Column("int", { default: 0 })
type: number;
@Field()
@Column("text", { default: '' })
restaurant_key: string;
@OneToOne(() => Headquarter)
@Field(() => Headquarter)
@JoinColumn()
headquarter: Headquarter;
}
@Resolver()
export class RestaurantResolver {
@Query(() => Restaurant)
async getRestaurant(
@Arg("restaurantId", { nullable: false }) restaurantId: number
) {
console.log(await Restaurant.findOne(restaurantId, { relations:
["headquarter"] }));
const restaurant = await Restaurant.findOne(restaurantId, { relations:
["headquarter"] });
if (restaurant) {
return restaurant;
} else throw new Error("restaurant not found");
};
@Query(() => [Restaurant])
async getRestaurants() {
try {
return await Restaurant.find({ relations: ["headquarter"] });
} catch (error) {
console.log(error);
throw new Error('restaurants not found');
}
};
@Mutation(() => Restaurant)
async registerRestaurant(
@Arg("name", { nullable: false }) name: string, // nullable: false means
REQUIRED FIELD
@Arg("address", { nullable: false }) address: string,
@Arg("phone", { nullable: false }) phone: string,
@Arg("type", { nullable: false }) type: number,
@Arg("restaurant_key", { nullable: false }) restaurant_key: string,
// @Arg("headquarter", { nullable: false }) headquarter: number
) {
const restaurant = new Restaurant();
restaurant.name = name || restaurant.name;
restaurant.address = address || restaurant.address;
restaurant.phone = phone || restaurant.phone;
restaurant.type = type || restaurant.type;
restaurant.restaurant_key = restaurant_key ||
restaurant.restaurant_key;
// restaurant.headquarter = headquarter || restaurant.headquarter;
//??? how to update when in Restaurant Entity is OnetoOne and
JoinColumn
try {
return await Restaurant.save(restaurant);
} catch (error) {
console.log(error);
return error.message;
};
};
@Mutation(() => Restaurant)
async updateRestaurant(
@Arg("restaurantId", { nullable: false }) restaurantId: number,
@Arg("name", { nullable: true }) name?: string,
@Arg("address", { nullable: true }) address?: string,
@Arg("phone", { nullable: true }) phone?: string,
@Arg("type", { nullable: true }) type?: number,
@Arg("restaurant_key", { nullable: true }) restaurant_key?: string,
@Arg("headquarter", { nullable: true }) headquarter?: number
) {
console.log("phone",phone);
const restaurantToUpdate = await Restaurant.findOne(restaurantId);
console.log(restaurantToUpdate);
if (restaurantToUpdate) {
restaurantToUpdate.name = name || restaurantToUpdate.name;
restaurantToUpdate.address = address || restaurantToUpdate.address;
restaurantToUpdate.phone = phone || restaurantToUpdate.phone;
restaurantToUpdate.type = type || restaurantToUpdate.type;
restaurantToUpdate.restaurant_key = restaurant_key ||
restaurantToUpdate.restaurant_key;
restaurantToUpdate.headquarter = headquarter ||
restaurantToUpdate.headquarter; // type number is not assignable to type
Headquarter
return Restaurant.save(restaurantToUpdate);
} else {
throw new Error("restaurant not found");
};
};
};